Wireguardは、最先端の暗号化を使用するオープンソースのクロスプラットフォームVPN実装です。これは、IPSecおよびOpenVPNプロトコルよりも高速で、シンプルで、機能的です。組み込みインターフェースやスーパーコンピューターで実行する汎用VPNとして設計されており、Linux、Windows、macOS、iOS、Android、BSD、その他のさまざまなプラットフォームで実行されます。
このチュートリアルでは、CentOS8ベースのサーバーにWireguardVPNをインストールし、Linux(CentOS / Fedora / Ubuntu)クライアントを使用して接続する方法について説明します。
先に進む前に、システムを更新して最新の更新をインストールすることが不可欠です。
$ sudo dnf update
必要なWireguardパッケージはEPELリポジトリにあるため、インストールして有効にする必要があります。
$ sudo dnf install epel-release
$ sudo dnf config-manager --set-enabled PowerTools
EPELパッケージはPowerToolsリポジトリに依存しているため、PowerToolsリポジトリも有効にしました。
Wireguardリポジトリを有効にします。
$ sudo dnf copr enable jdoss/wireguard
Wireguardをインストールします。
$ sudo dnf install wireguard-dkms wireguard-tools
この手順では、Linuxカーネルモジュールの構築に必要なGNUGCCコンパイラもインストールされます。
適切な権限を持つWireguard設定用の空の構成ファイルをサーバー上に作成します。
$ sudo mkdir /etc/wireguard
$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'
タッチコマンドは、ファイルwg0-server.conf
を作成します /etc/wireguard
内のファイル ディレクトリ。
次に、Wireguardサーバーの秘密鍵と公開鍵のペアを作成します。
$ cd /etc/wireguard
$ sudo sh -c 'umask 077; wg genkey | tee privatekey | wg pubkey > publickey'
これにより、Wireguardの公開鍵と秘密鍵の両方が作成され、それぞれのファイルに書き込まれます。
作成した秘密鍵を表示します。
$ sudo cat privatekey
キーをメモしてコピーします。Wireguardを構成するために必要になるためです。
次に、構成ファイルを編集します。
$ sudo nano /etc/wireguard/wg0.conf
次のコードを追加します。
[Interface]
## VPN server private IP address ##
Address = 192.168.10.1/24
## VPN server port - You can choose any port ##
ListenPort = 37822
## VPN server's private key i.e. /etc/wireguard/privatekey - the one from above ##
PrivateKey = GCEXafeZKqSsuLfvuHE+zLzMYwoH4qQyBh7MZ4f/3kM=
## Save and update this config file when a new peer (vpn client) added ##
SaveConfig = true
各構成には、[Interface]
という1つのセクションがあります サーバー部分が定義されている場所。
これには、ローカルWireGuardサーバーの秘密鍵、着信接続をリッスンするUDPポート、および独自のVPNIPアドレスが含まれています。
SaveConfig
も設定します true
に 。これにより、Wireguardサービスは、シャットダウン時にアクティブな構成をこのファイルに自動的に保存するようになります。
Ctrl + Wを押します ファイルを閉じてYと入力します ファイルを保存するように求められたら。
Wireguard用に選択したポートを開く必要があります。
まず、ファイアウォールのWireguardサービスを定義する必要があります。これを行うには、ファイルwireguard.xml
を作成します Nanoエディターを使用します。
$ sudo nano /etc/firewalld/services/wireguard.xml
次のコードをファイルに貼り付けます。
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>wireguard</short>
<description>WireGuard open UDP port 37822 for client connections</description>
<port protocol="udp" port="37822"/>
</service>
Ctrl + Wを押します ファイルを閉じてYと入力します ファイルを保存するように求められたら。
次に、ファイアウォールでWireguardサービスを有効にします。
$ sudo firewall-cmd --permanent --add-service=wireguard
マスカレードをオンにして、すべてのトラフィックが 192.168.10.0/24から出入りするようにします。 サーバーのパブリックIPアドレスを介してルーティング203.1.114.98/ 24 。
$ sudo firewall-cmd --permanent --add-masquerade
最後に、ファイアウォールをリロードしてルールをアクティブにします。
$ sudo firewall-cmd --reload
確認する現在のファイアウォールルールを一覧表示します。
$ sudo firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: wireguard ssh
ports:
protocols:
masquerade: yes
forward-ports:
source-ports:
icmp-blocks:
rich rules:
/etc/sysctl.d/99-custom.conf
を作成します ファイル。
$ sudo nano /etc/sysctl.d/99-custom.conf
次のコードをファイルに貼り付けます。
## Turn on bbr ##
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
## for IPv4 ##
net.ipv4.ip_forward = 1
## Turn on basic protection/security ##
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1
## for IPv6 ##
net.ipv6.conf.all.forwarding = 1
Ctrl + Wを押します ファイルを閉じてYと入力します ファイルを保存するように求められたら。
上記のファイルのコードの範囲はこのチュートリアルの範囲外であるため、今のところはそのまま使用してください。
変更を再読み込みします。
$ sudo sysctl -p /etc/sysctl.d/99-custom.conf
デフォルトでは、ファイアウォールはwg0
を許可しません およびeth0
インターフェイスは相互に通信します。そのため、Wireguardインターフェースを内部ネットワークに追加し、マスカレードをオンにする必要があります。
$ sudo firewall-cmd --add-interface=wg0 --zone=internal
$ sudo firewall-cmd --permanent --zone=internal --add-masquerade
次に、Wireguardサービスを有効にして開始する必要があります。
$ sudo systemctl enable [email protected]
$ sudo systemctl start [email protected]
Wireguardインターフェースwg0
かどうかを確認できます 次のコマンドを使用して、が稼働しています。
$ sudo wg
interface: wg0
public key: VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
private key: (hidden)
listening port: 37822
$ sudo ip a show wg0
3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 192.168.10.1/24 scope global wg0
valid_lft forever preferred_lft forever
Linuxディストリビューション用のWireguardクライアントのインストール手順は、公式のインストールページから見つけることができます。
クライアントをインストールしたら、クライアント構成ファイルを作成する必要があります。
$ sudo mkdir /etc/wireguard
$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'
$ cd /etc/wireguard/
$ sudo sh -c 'umask 077; wg genkey | tee privatekey | wg pubkey > publickey'
$ sudo cat privatekey
最後に取得する秘密鍵に注意してください。次に、作成した構成ファイルを編集する必要があります。
$ sudo nano /etc/wireguard/wg0.conf
次のディレクティブをファイルに追加します。
[Interface]
## client private key ##
PrivateKey = OEM6D/zt2fVWOepVv3iEDD430V0gAshKp4+5oVVt5EE=
## client ip address ##
Address = 192.168.10.2/24
[Peer]
## CentOS 8 server public key ##
PublicKey = VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
## set ACL ##
AllowedIPs = 192.168.10.0/24
## Your CentOS 8 server's public IPv4/IPv6 address and port ##
Endpoint = 203.1.114.98:37822
## Key connection alive ##
PersistentKeepalive = 15
プライベートIP192.168.10.1を割り当てたことに注意してください サーバーと192.168.10.2 クライアントに。また、クライアントの秘密鍵をファイルに追加しました。
[Peer]
セクションは、クライアントが接続するサーバーの構成を入力する場所です。ここでは、公開鍵、公開IP、およびサーバーのプライベートIPを含む一連の許可されたIPを追加しました。 PersistentKeepalive
WireGuardに15秒ごとにUDPパケットを送信するように指示します。これは、NATの背後にいて、接続を維持したい場合に便利です。
Ctrl + Wを押します ファイルを閉じてYと入力します ファイルを保存するように求められたら。
今こそ、VPNクライアントを有効にして起動するときです。
$ sudo systemctl enable [email protected]
$ sudo systemctl start [email protected]
$ sudo systemctl status [email protected]
次に、クライアントの構成をサーバーに再度追加して、クライアントについて通知する必要があります。
最初にWireguardサービスを停止します。
$ sudo systemctl stop [email protected]
編集のためにファイルwg0.confを開きます。
$ sudo nano /etc/wireguard/wg0.conf
ファイルの最後に次のコードを追加します。
[Peer]
## client VPN public key ##
PublicKey = dmfO9pirB315slXOgxXtmrBwAqPy07C57EvPks1IKzA=
## client VPN IP address (note /32 subnet) ##
AllowedIPs = 192.168.10.2/32
Ctrl + Wを押します ファイルを閉じてYと入力します ファイルを保存するように求められたら。
[Peer]
セクションは、VPNネットワークの他のメンバーを定義します。必要な数だけ追加できます。
それらには公開鍵が含まれており、[Interface]
のピアの秘密鍵と一致する必要があります セクション。
着信接続は、最初に公開鍵の1つに対して認証されることに注意してください。接続が検証済みのピアからのものでない場合、着信パケットは黙って無視されます。一致する秘密鍵を所有していないホストからの接続にはまったく応答しないため、WireGuard VPNは暗号化された通信を提供するだけでなく、外部からも隠されたままになります。
Wireguardサービスを再開します。
$ sudo systemctl start [email protected]
クライアントとサーバーの両方がVPNを使用して安全に接続されているかどうかを確認しましょう。接続をテストするには、クライアントで次のコマンドを実行します。
$ ping -c 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=44.2 ms
64 bytes from 192.168.10.1: icmp_seq=2 ttl=64 time=45.8 ms
64 bytes from 192.168.10.1: icmp_seq=3 ttl=64 time=46.7 ms
64 bytes from 192.168.10.1: icmp_seq=4 ttl=64 time=44.1 ms
--- 192.168.10.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2800ms
rtt min/avg/max/mdev = 41.729/47.829/48.953/5.046 ms
$ sudo wg
interface: wg0
public key: dmfO9pirB315slXOgxXtmrBwAqPy07C57EvPks1IKzA=
private key: (hidden)
listening port:
peer: VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
endpoint: 203.1.114.98:37822
allowed ips: 192.168.10.0/24
latest handshake: 1 minute, 40 seconds ago
transfer: 938 B received, 45.67 KiB sent
persistent: keepalive: every 15 seconds
このチュートリアルにあるのはこれだけです。これで、CentOS8サーバーをベースにしたWireguardベースのVPNサーバーができました。ご不明な点がございましたら、下のコメント欄でお尋ねください。