CentOS Stream 8
Sponsored Link

WireGuard : クライアントの設定 (CentOS)2021/06/23

 
シンプルで高速な VPN サーバー、WireGuard のインストールと設定です。
当例では以下のような環境で WireGuard クライアントを設定します。
インターネットを経由するため、事前に、自身の環境で、WireGuard サーバー側のローカルネットワークとインターネットの境界ルーターに、IP マスカレードの設定が必要です。
下例の場合、WireGuard クライアントからインターネットを経由して WireGuard サーバーのグローバル IP アドレス宛てに来るパケットを、[Router#1] 上で、WireGuard サーバーの IP アドレス (10.0.0.30) の、WireGuard 設定ファイルで指定した待ち受けポート (UDP) に転送するよう設定します。
  +------------------------+
  | [  WireGuard Server  ] |172.16.100.1 (VPN IP)
  |      dlp.srv.world     +--------+
  |                        |wg0     |
  +-----------+------------+        |
          eth0|10.0.0.30/24         |
              |                     |
              |       Local Network |
       +------+-----+               |
-------|  Router#1  |---------------|-----
       +------+-----+               |
              |                     |
    Internet  |  Internet           |
              |                     |
       +------+-----+               |
-------|  Router#2  |---------------|-----
       +------+-----+               |
              |       Local Network |
              |                     |
          eth0|192.168.10.30/24     |
  +-----------+------------+        |
  |  [ WireGuard Client ]  |wg0     |
  |                        +--------+
  |                        |172.16.100.5 (VPN IP)
  +------------------------+

[1]
事前に、サーバー側で生成した [クライアント用プライベートキー] と [サーバー用パブリックキー] を、設定するクライアントに転送、または、内容を通知しておきます。
[2] WireGuard をインストールします。
# EPEL, ELRepo からインストール

[root@client ~]#
dnf --enablerepo=epel,elrepo -y install wireguard-tools kmod-wireguard
# kmod-wireguard が対応したカーネルバージョン確認

# ELRepo 提供の kmod-wireguard は特定のバージョンでビルドされている

[root@client ~]#
rpm -ql kmod-wireguard

/etc/depmod.d/kmod-wireguard.conf
/lib/modules/4.18.0-305.el8.x86_64
/lib/modules/4.18.0-305.el8.x86_64/extra
/lib/modules/4.18.0-305.el8.x86_64/extra/wireguard
/lib/modules/4.18.0-305.el8.x86_64/extra/wireguard/wireguard.ko
/usr/share/doc/kmod-wireguard-1.0.20210606
/usr/share/doc/kmod-wireguard-1.0.20210606/GPL-v2.0.txt
/usr/share/doc/kmod-wireguard-1.0.20210606/greylist.txt

# 現在のカーネル確認

[root@client ~]#
uname -a

Linux dlp.srv.world 4.18.0-310.el8.x86_64 #1 SMP Tue Jun 8 00:24:50 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
# kmod-wireguard 対応バージョンと一致しない場合は対応カーネルインストール

[root@client ~]#
dnf -y install kernel-4.18.0-305.el8.x86_64
# インストール済みカーネルの index 番号確認

[root@client ~]#
grubby --info=ALL

index=0
kernel="/boot/vmlinuz-4.18.0-310.el8.x86_64"
args="ro crashkernel=auto resume=/dev/mapper/cs-swap rd.lvm.lv=cs/root rd.lvm.lv=cs/swap console=ttyS0,115200n8 $tuned_params"
root="/dev/mapper/cs-root"
initrd="/boot/initramfs-4.18.0-310.el8.x86_64.img $tuned_initrd"
title="CentOS (4.18.0-310.el8.x86_64) 8"
id="54f4bd7df8464337a3009215fdef55fb-4.18.0-310.el8.x86_64"
index=1
kernel="/boot/vmlinuz-4.18.0-305.el8.x86_64"
args="ro crashkernel=auto resume=/dev/mapper/cs-swap rd.lvm.lv=cs/root rd.lvm.lv=cs/swap console=ttyS0,115200n8 $tuned_params"
root="/dev/mapper/cs-root"
initrd="/boot/initramfs-4.18.0-305.el8.x86_64.img $tuned_initrd"
title="CentOS Linux (4.18.0-305.el8.x86_64) 8"
id="54f4bd7df8464337a3009215fdef55fb-4.18.0-305.el8.x86_64"
.....
.....

# kmod-wireguard 対応カーネルに変更

[root@client ~]#
grubby --set-default-index=1
# 確認とモジュールロードの設定

[root@client ~]#
grubby --default-index

1
[root@client ~]#
echo "wireguard" > /etc/modules-load.d/wireguard.conf
[root@client ~]#
[3] WireGuard の設定です。
[root@client ~]#
umask 077
# 設定ファイル新規作成

# [wg0.conf] ⇒ [(VPN インターフェース名).conf] のルール内で任意の名称で OK

[root@client ~]#
vi /etc/wireguard/wg0.conf
[Interface]
# サーバー側で生成したクライアント用プライベートキーを指定
PrivateKey = uHd/504vB6m9AlBRIsf8x0+oESwvT29NNfw8o28QxHk=
# VPN インターフェースに割り当てる IP アドレス
Address = 172.16.100.5

[Peer]
# サーバー側で生成したサーバー用パブリックキーを指定
PublicKey = C8N7dSeUDtIVGVqD9hxVTbX9zZpqYOdeiPnFU782iQw=
# 接続を許可する IP アドレス または ネットワーク範囲
# 下例は、WireGuard サーバーの VPN IP アドレスと、実際のローカルネットワークを許可
AllowedIPs = 172.16.100.1, 10.0.0.0/24
# サーバーのグローバル IP アドレス:ポート
# (下例は実際はプライベート用の IP アドレスだが、自身の環境に置き換え)
EndPoint = 172.29.10.100:51820

# VPN インターフェース 起動

[root@client ~]#
wg-quick up wg0

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 172.16.100.5 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] ip -4 route add 172.16.100.1/32 dev wg0
[#] ip -4 route add 10.0.0.0/24 dev wg0

[root@client ~]#
ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:16:61:49 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.30/24 brd 192.168.0.255 scope global noprefixroute enp1s0
       valid_lft forever preferred_lft forever
    inet6 fe80::e38e:e34:9b82:29a2/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 172.16.100.5/32 scope global wg0
       valid_lft forever preferred_lft forever

# 接続状態確認

[root@client ~]#
wg show

interface: wg0
  public key: ma2n4UkzUAcWp4E6z4R0RbF0cBwDXr4yEOxBXRx9zwc=
  private key: (hidden)
  listening port: 45623

peer: C8N7dSeUDtIVGVqD9hxVTbX9zZpqYOdeiPnFU782iQw=
  endpoint: 172.29.10.100:51820
  allowed ips: 172.16.100.1/32, 10.0.0.0/24
  latest handshake: 1 minute, 9 seconds ago
  transfer: 316 B received, 404 B sent
[4] VPN 接続が確立できたら、クライアントからサーバー側のローカルネットワークにアクセスできるか確認しておくとよいでしょう。
[root@client ~]#
ping -c 3 10.0.0.30

PING 10.0.0.30 (10.0.0.30) 56(84) bytes of data.
64 bytes from 10.0.0.30: icmp_seq=1 ttl=64 time=2.42 ms
64 bytes from 10.0.0.30: icmp_seq=2 ttl=64 time=1.99 ms
64 bytes from 10.0.0.30: icmp_seq=3 ttl=64 time=1.88 ms

--- 10.0.0.30 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 1.589/1.768/1.889/0.133 ms

[root@client ~]#
ping -c 3 10.0.0.10

PING 10.0.0.10 (10.0.0.10) 56(84) bytes of data.
64 bytes from 10.0.0.10: icmp_seq=1 ttl=63 time=3.30 ms
64 bytes from 10.0.0.10: icmp_seq=2 ttl=63 time=1.89 ms
64 bytes from 10.0.0.10: icmp_seq=3 ttl=63 time=1.87 ms

--- 10.0.0.10 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 1.350/1.754/2.063/0.300 ms
関連コンテンツ