ウェブサイト検索

Linux に OpenVPN サーバーをインストールして構成する最も簡単な方法


このガイドでは、RPM および DEB ベースのシステムに OpenVPN サーバーをインストールして構成する方法について説明します。このガイドでは、OpenVPN サーバーのインストールと構成プロセス全体を自動化する openvpn-install というスクリプトを使用します。このスクリプトを使用すると、これまで OpenVPN を使用したことがない場合でも、数分で独自の VPN サーバーをセットアップできます。

始めましょう。

Linux での OpenVPN サーバーのインストールと構成

このガイドでは、CentOS 7 64 ビット版で実行されている 2 つのシステムを使用します。 1 つは OpenVPN サーバーとして機能し、もう 1 つは OpenVPN クライアントとして機能します。以下は私のテストボックスの詳細です。

OpenVPN サーバー:

  • OS : CentOS 7 64 ビット最小版
  • IP : 192.168.43.150/24
  • ホスト名 : vpnserver.ostechnix.local

OpenVPN クライアント:

  • OS : CentOS 7 64 ビット最小版
  • IP : 192.168.43.199/24

まず、サーバー側の構成を見ていきます。

OpenVPN サーバーのインストールと構成

GitHub ページから openvpn-install スクリプトをダウンロードします。

wget https://git.io/vpn -O openvpn-install.sh

次に、root ユーザーとして次のコマンドを使用してスクリプトを実行します。

bash openvpn-install.sh

一連の質問に答えるように求められます。それに応じて答えてください。

VPN サーバーの IP アドレスが正しいことを確認してください。複数の IP アドレスを使用する場合は、OpenVPN がリッスンするネットワーク インターフェースの IP を入力します。

Welcome to this quick OpenVPN "road warrior" installer

I need to ask you a few questions before starting the setup
 You can leave the default options and just press enter if you are ok with them

First I need to know the IPv4 address of the network interface you want OpenVPN
 listening to.
 IP address: 192.168.43.150

使用するプロトコルを選択します。 TCP ポートを使用したいので、番号 2 を選択しました。

Which protocol do you want for OpenVPN connections?
 1) UDP (recommended)
 2) TCP
Protocol [1-2]: 2

ポート番号を入力します。

What port do you want OpenVPN listening to?
Port: 1194

VPN で使用する DNS サーバーの詳細を入力します。 Google DNS リゾルバーを使用したいので、オプション 2 を選択しました。

Which DNS do you want to use with the VPN?
 1) Current system resolvers
 2) Google
 3) OpenDNS
 4) NTT
 5) Hurricane Electric
 6) Verisign
DNS [1-6]: 2

最終段階に到達しました。クライアント証明書の名前を入力します。名前は単一の単語である必要があり、特殊文字を含めることはできません。

Finally, tell me your name for the client certificate
Please, use one word only, no special characters
Client name: client

Enter キーを押して、OPENVPN サーバーのインストールを開始します。

Okay, that was all I needed. We are ready to setup your OpenVPN server now
Press any key to continue...

さて、このスクリプトは、OpenVPN サーバーのセットアップに必要なすべてのパッケージのインストールを開始します。つまり、VPN クライアントでの認証に必要なすべてのキーと証明書が作成されます。これには数分かかります。

最後に、スクリプトは外部 IP アドレスがあるかどうかを尋ねます。何も持っていない場合は、空白のままにして無視し、ENTER キーを押します。

If your server is NATed (e.g. LowEndSpirit), I need to know the external IP
If that's not the case, just ignore this and leave the next field blank
External IP: 

Finished!

Your client configuration is available at /root/client.ovpn
If you want to add more clients, you simply need to run this script again!

OpenVPN サーバーのインストールと構成が完了しました。最後の出力に見られるように、クライアント設定の詳細はファイル /root/client.ovpn に保存されています。このファイルをすべての VPN クライアント システムにコピーする必要があります。

client.ovpn ファイルを VPN クライアントにコピーしました

scp client.ovpn root@192.168.43.199:/etc/openvpn/

次に、OpenVPN クライアントを構成する必要があります。

OpenVPN クライアントの構成

client.ovpn ファイルが VPN サーバー システムからコピーされていることを確認してください。このファイルはすでに VPN クライアント システムの /etc/openvpn/ ディレクトリにコピーされています。

配布パッケージ マネージャーを使用して OpenVPN パッケージをインストールします。

yum install openvpn

次に、次のコマンドを実行して、VPN サーバーとの安全な接続を確立します。

openvpn --config /etc/openvpn/client.ovpn

サンプル出力:

Wed Apr 5 18:50:44 2017 Unrecognized option or missing parameter(s) in /etc/openvpn/client.ovpn:14: block-outside-dns (2.3.14)
Wed Apr 5 18:50:44 2017 OpenVPN 2.3.14 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Dec 7 2016
Wed Apr 5 18:50:44 2017 library versions: OpenSSL 1.0.1e-fips 11 Feb 2013, LZO 2.06
Wed Apr 5 18:50:44 2017 Control Channel Authentication: tls-auth using INLINE static key file
Wed Apr 5 18:50:44 2017 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Wed Apr 5 18:50:44 2017 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Wed Apr 5 18:50:44 2017 Socket Buffers: R=[87380->87380] S=[16384->16384]
Wed Apr 5 18:50:44 2017 Attempting to establish TCP connection with [AF_INET]192.168.43.150:1194 [nonblock]
Wed Apr 5 18:50:45 2017 TCP connection established with [AF_INET]192.168.43.150:1194
Wed Apr 5 18:50:45 2017 TCPv4_CLIENT link local: [undef]
Wed Apr 5 18:50:45 2017 TCPv4_CLIENT link remote: [AF_INET]192.168.43.150:1194
Wed Apr 5 18:50:45 2017 TLS: Initial packet from [AF_INET]192.168.43.150:1194, sid=c6fb554e 362eb192
Wed Apr 5 18:50:45 2017 VERIFY OK: depth=1, CN=ChangeMe
Wed Apr 5 18:50:45 2017 Validating certificate key usage
Wed Apr 5 18:50:45 2017 ++ Certificate has key usage 00a0, expects 00a0
Wed Apr 5 18:50:45 2017 VERIFY KU OK
Wed Apr 5 18:50:45 2017 Validating certificate extended key usage
Wed Apr 5 18:50:45 2017 ++ Certificate has EKU (str) TLS Web Server Authentication, expects TLS Web Server Authentication
Wed Apr 5 18:50:45 2017 VERIFY EKU OK
Wed Apr 5 18:50:45 2017 VERIFY OK: depth=0, CN=server
Wed Apr 5 18:50:45 2017 Data Channel Encrypt: Cipher 'AES-256-CBC' initialized with 256 bit key
Wed Apr 5 18:50:45 2017 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Wed Apr 5 18:50:45 2017 Data Channel Decrypt: Cipher 'AES-256-CBC' initialized with 256 bit key
Wed Apr 5 18:50:45 2017 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Wed Apr 5 18:50:45 2017 Control Channel: TLSv1.2, cipher TLSv1/SSLv3 DHE-RSA-AES256-GCM-SHA384, 2048 bit RSA
Wed Apr 5 18:50:45 2017 [server] Peer Connection Initiated with [AF_INET]192.168.43.150:1194
Wed Apr 5 18:50:48 2017 SENT CONTROL [server]: 'PUSH_REQUEST' (status=1)
Wed Apr 5 18:50:48 2017 PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1 bypass-dhcp,dhcp-option DNS 8.8.8.8,dhcp-option DNS 8.8.4.4,route-gateway 10.8.0.1,topology subnet,ping 10,ping-restart 120,ifconfig 10.8.0.2 255.255.255.0'
Wed Apr 5 18:50:48 2017 OPTIONS IMPORT: timers and/or timeouts modified
Wed Apr 5 18:50:48 2017 OPTIONS IMPORT: --ifconfig/up options modified
Wed Apr 5 18:50:48 2017 OPTIONS IMPORT: route options modified
Wed Apr 5 18:50:48 2017 OPTIONS IMPORT: route-related options modified
Wed Apr 5 18:50:48 2017 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
Wed Apr 5 18:50:48 2017 ROUTE_GATEWAY 192.168.43.1/255.255.255.0 IFACE=enp0s3 HWADDR=08:00:27:28:98:6b
Wed Apr 5 18:50:48 2017 TUN/TAP device tun0 opened
Wed Apr 5 18:50:48 2017 TUN/TAP TX queue length set to 100
Wed Apr 5 18:50:48 2017 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Wed Apr 5 18:50:48 2017 /usr/sbin/ip link set dev tun0 up mtu 1500
Wed Apr 5 18:50:48 2017 /usr/sbin/ip addr add dev tun0 10.8.0.2/24 broadcast 10.8.0.255
Wed Apr 5 18:50:48 2017 /usr/sbin/ip route add 192.168.43.150/32 dev enp0s3
Wed Apr 5 18:50:48 2017 /usr/sbin/ip route add 0.0.0.0/1 via 10.8.0.1
Wed Apr 5 18:50:48 2017 /usr/sbin/ip route add 128.0.0.0/1 via 10.8.0.1
Wed Apr 5 18:50:48 2017 Initialization Sequence Completed

次に、tun0(VPN インターフェイス) が作成されているかどうかを確認し、「ip addr」コマンドを使用して VPN インターフェイスの IP アドレスを確認します。

ip addr

サンプル出力:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 inet 127.0.0.1/8 scope host lo
 valid_lft forever preferred_lft forever
 inet6 ::1/128 scope host 
 valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
 link/ether 08:00:27:28:98:6b brd ff:ff:ff:ff:ff:ff
 inet 192.168.43.199/24 brd 192.168.43.255 scope global dynamic enp0s3
 valid_lft 42359sec preferred_lft 42359sec
 inet6 fe80::a00:27ff:fe28:986b/64 scope link 
 valid_lft forever preferred_lft forever
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
 link/none 
 inet 10.8.0.2/24 brd 10.8.0.255 scope global tun0
 valid_lft forever preferred_lft forever

上記の出力でわかるように、VPN サーバーは VPN クライアントに IP アドレス 10.8.0.2 を自動的に割り当てました。

ここで、VPN クライアント システムから VPN サーバーに ping を実行してみます。

ping -c3 10.8.0.1

サンプル出力:

PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data.
64 bytes from 10.8.0.1: icmp_seq=1 ttl=64 time=1.05 ms
64 bytes from 10.8.0.1: icmp_seq=2 ttl=64 time=1.94 ms
64 bytes from 10.8.0.1: icmp_seq=3 ttl=64 time=2.49 ms

--- 10.8.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 1.057/1.832/2.495/0.594 ms

おめでとう!これで、CentOS に OpenVPN サーバーとクライアントが正常にインストールされ、構成されました。この方法は、Ubuntu や Linux Mint などの DEB ベースのシステムでも同じです。手動インストールとは異なり、このスクリプトを使用すると、openvpn のインストールと構成がはるかに簡単になります。

乾杯!

リソース:

  • openvpn-install GitHub ページ

関連記事