VPNは「仮想プライベートネットワーク」とも呼ばれ、パブリックインターネット上に安全なプライベートネットワークを作成できるようにするテクノロジーです。これは、インターネットトラフィックを暗号化し、オンラインIDを保護するのに役立ちます。これは主に、インターネットを介して2つのビジネスネットワークを安全に接続するために使用され、自宅からビジネスネットワークに接続できるようにします。
簡単に言うと、VPNは、モバイル、コンピューター、タブレットをインターネット経由で別のコンピューター(サーバー)に接続し、そのコンピューターのインターネットを使用してインターネットにアクセスしたり、インターネット検閲をリモートでバイパスしてローカルネットワークリソースにアクセスしたりできるようにします。
>このチュートリアルでは、CentOS8にOpenVPNサーバーをインストールして構成する方法を示します。
ステップ1–SELinuxを無効にする
開始する前に、システムでSELinuxを無効にすることをお勧めします。
SELinuxを無効にするには、/ etc / selinux/configファイルを開きます。
nano /etc/selinux/config
次の行を変更します:
SELINUX=disabled
終了したらファイルを保存します。次に、システムを再起動してSELinuxの変更を適用します。
ステップ2–IP転送を有効にする
次に、システムでIP転送を有効にする必要があります。 IP転送を使用すると、オペレーティングシステムは着信ネットワークパケットを受け入れ、宛先が別のネットワーク上にある場合はそれを他のネットワークに転送できます。
IP転送を有効にするには、ファイル/etc/sysctl.confを編集します:
nano /etc/sysctl.conf
次の行を追加します:
net.ipv4.ip_forward = 1
終了したらファイルを保存します。次に、次のコマンドを実行して変更を適用します。
sysctl -p
ステップ3–OpenVPNサーバーをインストールする
デフォルトでは、OpenVPNの最新バージョンをインストールするには、システムにEPELリポジトリをインストールする必要があります。
次のコマンドを実行して、ELEPリポジトリをインストールします。
dnf install epel-release -y
インストールしたら、次のコマンドを実行して最新バージョンのOpenVPNをインストールします。
dnf install openvpn -y
インストールが完了したら、SSL証明書を管理するためのeasy-rsaもダウンロードする必要があります。
次のコマンドを実行して、/ etc/openvpnディレクトリ内のeasy-rsaをダウンロードします。
cd /etc/openvpn wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.6/EasyRSA-unix-v3.0.6.tgz
次に、次のコマンドを実行して、ダウンロードしたファイルを抽出します。
tar -xvzf EasyRSA-unix-v3.0.6.tgz
次に、抽出したディレクトリの名前をeasy-rsaに変更します。
mv EasyRSA-v3.0.6 easy-rsa
ステップ4–認証局の設定
Easy RSAは、一連のスクリプトを使用してキーと証明書を生成します。まず、システムで認証局を構成する必要があります。
これを行うには、ディレクトリを/ etc / openvpn / easy-rsaに変更し、新しいEasyRSAの構成ファイルを作成します。
cd /etc/openvpn/easy-rsa nano vars
国、都市、優先メールアドレスを含む次の行を追加します。
EASYRSA_REQ_EMAIL set_var EASYRSA_DN set_var EASYRSA_PKI set_var set_var EASYRSA "$ PWD" "$ EASYRSA / PKI" "cn_only" set_var EASYRSA_REQ_COUNTRY "INDIA" set_var EASYRSA_REQ_PROVINCE "Gujrat" set_var EASYRSA_REQ_CITY "アーメダバード" set_var EASYRSA_REQ_ORG "Tecadmin CERTIFICATE AUTHORITY" を「set_var EASYRSA "$PWD" set_var EASYRSA_PKI "$EASYRSA/pki" set_var EASYRSA_DN "cn_only" set_var EASYRSA_REQ_COUNTRY "INDIA" set_var EASYRSA_REQ_PROVINCE "Gujrat" set_var EASYRSA_REQ_CITY "Ahmedabad" set_var EASYRSA_REQ_ORG "Tecadmin CERTIFICATE AUTHORITY" set_var EASYRSA_REQ_EMAIL "[email protected]" set_var EASYRSA_REQ_OU "Tecadmin EASY CA" set_var EASYRSA_KEY_SIZE 2048 set_var EASYRSA_ALGO rsa set_var EASYRSA_CA_EXPIRE 7500 set_var EASYRSA_CERT_EXPIRE 365 set_var EASYRSA_NS_SUPPORT "no" set_var EASYRSA_NS_COMMENT "Tecadmin CERTIFICATE AUTHORITY" set_var EASYRSA_EXT_DIR "$EASYRSA/x509-types" set_var EASYRSA_SSL_CONF "$EASYRSA/openssl-easyrsa.cnf" set_var EASYRSA_DIGEST "sha256"
終了したらファイルを保存します。
次に、次のコマンドを実行してPKIディレクトリを開始します。
./easyrsa init-pki
出力:
Note: using Easy-RSA configuration from: ./vars init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /etc/openvpn/easy-rsa/pkiです。
次に、次のコマンドを使用してCA証明書を作成します。
./easyrsa build-ca
次の出力が得られるはずです:
Note: using Easy-RSA configuration from: ./vars Using SSL: openssl OpenSSL 1.1.1c FIPS 28 May 2019 Enter New CA Key Passphrase: Re-Enter New CA Key Passphrase: Generating RSA private key, 2048 bit long modulus (2 primes) ....................................................................+++++ ..........................................................................................................................................+++++ e is 65537 (0x010001) Can't load /etc/openvpn/easy-rsa/pki/.rnd into RNG 140218549745472:error:2406F079:random number generator:RAND_load_file:Cannot open file:crypto/rand/randfile.c:98:Filename=/etc/openvpn/easy-rsa/pki/.rnd You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Common Name (eg: your user, host, or server name) [Easy-RSA CA]: CA creation complete and you may now import and sign cert requests. Your new CA certificate file for publishing is at: /etc/openvpn/easy-rsa/pki/ca.crt
上記のコマンドは、ca.keyおよびca.crtという名前の2つのファイルを生成します。これらの証明書は、サーバーとクライアントの証明書に署名するために使用されます。
ステップ5–サーバー証明書ファイルの生成
次に、サーバーのキーペアと証明書のリクエストを生成する必要があります。
次のコマンドを実行して、tecadmin-serverという名前のサーバーキーを生成します。
./easyrsa gen-req tecadmin-server nopass
次の出力が得られるはずです:
Note: using Easy-RSA configuration from: ./vars Using SSL: openssl OpenSSL 1.1.1c FIPS 28 May 2019 Generating a RSA private key ...........................+++++ ...............................................................................................................................................................................................................................................................................................+++++ writing new private key to '/etc/openvpn/easy-rsa/pki/private/tecadmin-server.key.kOlBTwtY6a' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Common Name (eg: your user, host, or server name) [tecadmin-server]: Keypair and certificate request completed. Your files are: req: /etc/openvpn/easy-rsa/pki/reqs/tecadmin-server.req key: /etc/openvpn/easy-rsa/pki/private/tecadmin-server.key
ステップ6–CAを使用してサーバーキーに署名する
次に、CA証明書を使用してtecadmin-serverキーに署名する必要があります。
次のコマンドを実行して、サーバーキーに署名します。
./easyrsa sign-req server tecadmin-server
次の出力が得られるはずです:
Note: using Easy-RSA configuration from: ./vars Using SSL: openssl OpenSSL 1.1.1c FIPS 28 May 2019 You are about to sign the following certificate. Please check over the details shown below for accuracy. Note that this request has not been cryptographically verified. Please be sure it came from a trusted source or that you have verified the request checksum with the sender. Request subject, to be signed as a server certificate for 365 days: subject= commonName = tecadmin-server Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes Using configuration from /etc/openvpn/easy-rsa/pki/safessl-easyrsa.cnf Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key: Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :ASN.1 12:'tecadmin-server' Certificate is to be certified until Feb 16 05:00:50 2021 GMT (365 days) Write out database with 1 new entries Data Base Updated Certificate created at: /etc/openvpn/easy-rsa/pki/issued/tecadmin-server.crt
次に、次のコマンドを使用して、生成された証明書ファイルを確認します。
openssl verify -CAfile pki/ca.crt pki/issued/tecadmin-server.crt
すべてが正常であれば、次の出力が得られるはずです:
pki/issued/tecadmin-server.crt: OK
次に、次のコマンドを実行して、鍵交換に使用する強力なDiffie-Hellman鍵を生成します。
./easyrsa gen-dh
次の出力が得られるはずです:
Note: using Easy-RSA configuration from: ./vars Using SSL: openssl OpenSSL 1.1.1c FIPS 28 May 2019 Generating DH parameters, 2048 bit long safe prime, generator 2 This is going to take a long time ....+................................+........................................+.....++*++*++*++* DH parameters of size 2048 created at /etc/openvpn/easy-rsa/pki/dh.pem
すべての証明書ファイルを作成したら、それらを/ etc / openvpn /server/ディレクトリにコピーします。
cp pki/ca.crt /etc/openvpn/server/ cp pki/dh.pem /etc/openvpn/server/ cp pki/private/tecadmin-server.key /etc/openvpn/server/ cp pki/issued/tecadmin-server.crt /etc/openvpn/server/
ステップ7–クライアント証明書とキーファイルを生成する
次に、クライアントのキーと証明書ファイルを生成する必要があります。
まず、次のコマンドを実行してクライアントキーファイルを作成します。
./easyrsa gen-req client nopass
次の出力が表示されます。
Note: using Easy-RSA configuration from: ./vars Using SSL: openssl OpenSSL 1.1.1c FIPS 28 May 2019 Generating a RSA private key ......................................................+++++ ...+++++ writing new private key to '/etc/openvpn/easy-rsa/pki/private/client.key.e38GUtzHie' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Common Name (eg: your user, host, or server name) [client]: Keypair and certificate request completed. Your files are: req: /etc/openvpn/easy-rsa/pki/reqs/client.req key: /etc/openvpn/easy-rsa/pki/private/client.key
次に、CA証明書を使用してクライアントキーに署名します。
./easyrsa sign-req client client
次の出力が得られるはずです:
Note: using Easy-RSA configuration from: ./vars Using SSL: openssl OpenSSL 1.1.1c FIPS 28 May 2019 You are about to sign the following certificate. Please check over the details shown below for accuracy. Note that this request has not been cryptographically verified. Please be sure it came from a trusted source or that you have verified the request checksum with the sender. Request subject, to be signed as a client certificate for 365 days: subject= commonName = client Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes Using configuration from /etc/openvpn/easy-rsa/pki/safessl-easyrsa.cnf Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key: Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :ASN.1 12:'client' Certificate is to be certified until Feb 16 05:11:19 2021 GMT (365 days) Write out database with 1 new entries Data Base Updated Certificate created at: /etc/openvpn/easy-rsa/pki/issued/client.crt
次に、すべてのクライアント証明書とキーファイルを/ etc / openvpn /client/ディレクトリにコピーします。
cp pki/ca.crt /etc/openvpn/client/ cp pki/issued/client.crt /etc/openvpn/client/ cp pki/private/client.key /etc/openvpn/client/
ステップ8–OpenVPNサーバーを構成する
次に、/ etc / openvpn /client/ディレクトリ内に新しいOpenVPN構成ファイルを作成します。
nano /etc/openvpn/server/server.conf
次の行を追加します:
port 1194 proto udp dev tun ca /etc/openvpn/server/ca.crt cert /etc/openvpn/server/tecadmin-server.crt key /etc/openvpn/server/tecadmin-server.key dh /etc/openvpn/server/dh.pem server 10.8.0.0 255.255.255.0 push "redirect-gateway def1" push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220" duplicate-cn cipher AES-256-CBC tls-version-min 1.2 tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256 auth SHA512 auth-nocache keepalive 20 60 persist-key persist-tun compress lz4 daemon user nobody group nobody log-append /var/log/openvpn.log verb 3
終了したらファイルを保存します。
ステップ9–OpenVPNサービスを開始する
これでOpenVPNがインストールおよび構成されました。これで、次のコマンドを使用して、OpenVPNサービスを開始し、システムの再起動後に開始できるようになります。
systemctl start [email protected] systemctl enable [email protected]
次のコマンドを実行して、OpenVPNサービスのステータスを確認します。
systemctl status [email protected]
次の出力が得られるはずです:
● [email protected] - OpenVPN service for server Loaded: loaded (/usr/lib/systemd/system/[email protected]; enabled; vendor preset: disabled) Active: active (running) since Mon 2020-02-17 00:29:26 EST; 39min ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Main PID: 32405 (openvpn) Status: "Initialization Sequence Completed" Tasks: 1 (limit: 12552) Memory: 1.9M CGroup: /system.slice/system-openvpn\x2dserver.slice/[email protected] └─32405 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --cipher AES-256-> Feb 17 00:29:26 centos8 systemd[1]: Starting OpenVPN service for server... Feb 17 00:29:26 centos8 systemd[1]: Started OpenVPN service for server.
OpenVPNサービスが正常に開始されると、tun0という名前の新しいネットワークインターフェイスが作成されます。次のコマンドで確認できます:
ifconfig
次の出力で新しいインターフェイスtun0を取得する必要があります。
eth0: flags=4163mtu 1500 inet 104.245.36.127 netmask 255.255.255.0 broadcast 104.245.36.255 inet6 fe80::200:68ff:fef5:247f prefixlen 64 scopeid 0x20 ether 00:00:68:f5:24:7f txqueuelen 1000 (Ethernet) RX packets 1926738 bytes 314886412 (300.2 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 174907 bytes 29557250 (28.1 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73 mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1000 (Local Loopback) RX packets 216 bytes 40041 (39.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 216 bytes 40041 (39.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 tun0: flags=4305 mtu 1500 inet 10.8.0.1 netmask 255.255.255.255 destination 10.8.0.2 inet6 fe80::4152:a673:b260:d9e6 prefixlen 64 scopeid 0x20 unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (UNSPEC) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 4 bytes 304 (304.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ステップ10–クライアント構成ファイルの生成
次に、client.ovpnという名前の新しいOpenVPNクライアント構成ファイルを作成します。クライアントシステムからOpenVPNサーバーに接続するには、このファイルが必要です。
nano /etc/openvpn/client/client.ovpn
次の行を追加します:
client dev tun proto udp remote vpn-server-ip 1194 ca ca.crt cert client.crt key client.key cipher AES-256-CBC auth SHA512 auth-nocache tls-version-min 1.2 tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256 resolv-retry infinite compress lz4 nobind persist-key persist-tun mute-replay-warnings verb 3
終了したらファイルを保存します。
ステップ11–Firewalldを使用してルーティングを構成する
まず、firewalldを介したOpenVPNサービスを許可する必要があります。
これを行うには、OpenVPNサービスとtun0インターフェースを信頼できるファイアウォールゾーンに追加します。
firewall-cmd --permanent --add-service=openvpn firewall-cmd --permanent --zone=trusted --add-service=openvpn firewall-cmd --permanent --zone=trusted --add-interface=tun0
次に、デフォルトゾーンにMASQUERADEを追加します。
firewall-cmd --add-masquerade firewall-cmd --permanent --add-masquerade
次に、次のコマンドを実行して、VPNネットワーク(10.8.0.0/24)からシステムのローカルネットワークインターフェイス(eth0)に送信されるインターネットトラフィックを偽装します。
tecadmin=$(ip route get 8.8.8.8 | awk 'NR==1 {print $(NF-2)}') firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o $tecadmin -j MASQUERADE
最後に、次のコマンドを実行して変更を実装します。
firewall-cmd --reload
ステップ12–クライアントからOpenVPNを接続する
まず、クライアントマシンにログインし、次のコマンドを使用してOpenVPNパッケージをインストールします。
dnf install epel-release -y dnf install openvpn -y
次に、OpenVPNクライアント構成ファイルをOpenVPNサーバーからクライアントマシンにダウンロードする必要があります。
クライアントマシンで、次のコマンドを実行して、すべてのクライアント構成ファイルをダウンロードします。
scp -r [email protected]:/etc/openvpn/client .
ダウンロードしたら、ディレクトリをクライアントに変更し、次のコマンドを実行してOpenVPNサーバーに接続します。
cd client openvpn --config client.ovpn
次の出力が表示されます。
Mon Feb 17 00:54:17 2020 VERIFY OK: depth=0, CN=tecadmin-server Mon Feb 17 00:54:17 2020 Control Channel: TLSv1.3, cipher TLSv1.3 TLS_AES_256_GCM_SHA384, 2048 bit RSA Mon Feb 17 00:54:17 2020 [tecadmin-server] Peer Connection Initiated with [AF_INET]104.245.36.127:1194 Mon Feb 17 00:54:18 2020 SENT CONTROL [tecadmin-server]: 'PUSH_REQUEST' (status=1) Mon Feb 17 00:54:18 2020 PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1,dhcp-option DNS 208.67.222.222,dhcp-option DNS 208.67.220.220,route 10.8.0.1,topology net30,ping 20,ping-restart 60,ifconfig 10.8.0.6 10.8.0.5,peer-id 0,cipher AES-256-GCM' Mon Feb 17 00:54:18 2020 OPTIONS IMPORT: timers and/or timeouts modified Mon Feb 17 00:54:18 2020 OPTIONS IMPORT: --ifconfig/up options modified Mon Feb 17 00:54:18 2020 OPTIONS IMPORT: route options modified Mon Feb 17 00:54:18 2020 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified Mon Feb 17 00:54:18 2020 OPTIONS IMPORT: peer-id set Mon Feb 17 00:54:18 2020 OPTIONS IMPORT: adjusting link_mtu to 1625 Mon Feb 17 00:54:18 2020 OPTIONS IMPORT: data channel crypto options modified Mon Feb 17 00:54:18 2020 Data Channel: using negotiated cipher 'AES-256-GCM' Mon Feb 17 00:54:18 2020 Outgoing Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key Mon Feb 17 00:54:18 2020 Incoming Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key Mon Feb 17 00:54:18 2020 ROUTE_GATEWAY 45.58.38.1/255.255.255.0 IFACE=eth0 HWADDR=00:00:2d:3a:26:d9 Mon Feb 17 00:54:18 2020 TUN/TAP device tun0 opened Mon Feb 17 00:54:18 2020 TUN/TAP TX queue length set to 100 Mon Feb 17 00:54:18 2020 /sbin/ip link set dev tun0 up mtu 1500 Mon Feb 17 00:54:18 2020 /sbin/ip addr add dev tun0 local 10.8.0.6 peer 10.8.0.5
接続に成功すると、OpenVPNはシステムにIPアドレスを割り当てます。次のコマンドで確認できます:
ifconfig tun0
出力:
tun0: flags=4305mtu 1500 inet 10.8.0.6 netmask 255.255.255.255 destination 10.8.0.5 inet6 fe80::c6b:2644:5142:8e7f prefixlen 64 scopeid 0x20 unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (UNSPEC) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 2 bytes 96 (96.0 B) TX errors 0 dropped 0 overruns 0 carrier 0
おめでとう! CentOS8サーバーにOpenVPNサーバーとクライアントを正常にインストールして構成しました。