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

CentOS8でWireguardVPNを設定する方法

Wireguardは、最先端の暗号化を使用するオープンソースのクロスプラットフォームVPN実装です。これは、IPSecおよびOpenVPNプロトコルよりも高速で、シンプルで、機能的です。組み込みインターフェースやスーパーコンピューターで実行する汎用VPNとして設計されており、Linux、Windows、macOS、iOS、Android、BSD、その他のさまざまなプラットフォームで実行されます。

このチュートリアルでは、CentOS8ベースのサーバーにWireguardVPNをインストールし、Linux(CentOS / Fedora / Ubuntu)クライアントを使用して接続する方法について説明します。

ステップ1-システムの更新

先に進む前に、システムを更新して最新の更新をインストールすることが不可欠です。

$ sudo dnf update
ステップ2-EPELリポジトリをインストールして有効にする

必要なWireguardパッケージはEPELリポジトリにあるため、インストールして有効にする必要があります。

$ sudo dnf install epel-release
$ sudo dnf config-manager --set-enabled PowerTools

EPELパッケージはPowerToolsリポジトリに依存しているため、PowerToolsリポジトリも有効にしました。

ステップ3-Wireguardをインストールする

Wireguardリポジトリを有効にします。

$ sudo dnf copr enable jdoss/wireguard

Wireguardをインストールします。

$ sudo dnf install wireguard-dkms wireguard-tools

この手順では、Linuxカーネルモジュールの構築に必要なGNUGCCコンパイラもインストールされます。

ステップ4-Wireguardサーバーを構成する

適切な権限を持つ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と入力します ファイルを保存するように求められたら。

ステップ5-ファイアウォールを構成する

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: 
ステップ6-IPv4転送をオンにする

/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
ステップ7-Wireguardサービスを有効にして開始します

次に、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
ステップ8-WireGuardクライアントのインストールと構成

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]
ステップ9-クライアントを追加するようにサーバーを構成する

次に、クライアントの構成をサーバーに再度追加して、クライアントについて通知する必要があります。

最初に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]
ステップ10-テスト

クライアントとサーバーの両方が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サーバーができました。ご不明な点がございましたら、下のコメント欄でお尋ねください。


Cent OS
  1. CentOS7Linuxでホスト名を設定/変更する方法

  2. CentOS 8でDHCPサーバーをセットアップする-その方法は?

  3. CentOS8でWireGuardVPNを設定する方法

  1. Ubuntu20.04でWireGuardVPNを設定する方法

  2. UbuntuでWireGuardVPNを設定する方法(ステップバイステップガイド)

  3. CentOS7でシステムロケールを設定する方法

  1. Ubuntu18.04でWireGuardVPNを設定する方法

  2. Ubuntu20.04でWireGuardVPNを設定する方法

  3. CentOS8でWireGuardVPNを設定する方法