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 ページ