GNU/Linux >> Linux の 問題 >  >> Cent OS

CentOS /RHEL8にOpenVPNをインストールする方法

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=4163  mtu 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=4305  mtu 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サーバーとクライアントを正常にインストールして構成しました。


Cent OS
  1. CentOS8にMongoDBをインストールする方法

  2. CentOS7または8にOpenVPNをインストールする方法

  3. RHEL 8 /CentOS8にphpMyAdminをインストールする方法

  1. RHEL 8 /CentOS8にP7Zipをインストールする方法

  2. RHEL 8 /CentOS8にntfs-3gをインストールする方法

  3. PHP-mbstringをRHEL8/CentOS8にインストールする方法

  1. RHEL 8 /CentOS8にphantomjsをインストールする方法

  2. DropboxをRHEL8/CentOS8にインストールする方法

  3. RHEL 8 /CentOS8にコンパスをインストールする方法