WireGuard : サーバーの設定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] | WireGuard をインストールします。 |
# EPEL, ELRepo からインストール
[root@dlp ~]#
dnf --enablerepo=epel,elrepo -y install wireguard-tools kmod-wireguard # kmod-wireguard が対応したカーネルバージョン確認 # ELRepo 提供の kmod-wireguard は特定のバージョンでビルドされている [root@dlp ~]# 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@dlp ~]# 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@dlp ~]#
dnf -y install kernel-4.18.0-305.el8.x86_64
# インストール済みカーネルの index 番号確認 [root@dlp ~]# 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@dlp ~]# grubby --set-default-index=1
# 確認とモジュールロードの設定 [root@dlp ~]# grubby --default-index 1 [root@dlp ~]# echo "wireguard" > /etc/modules-load.d/wireguard.conf
|
[2] | WireGuard の設定です。 Firewalld でルーティングルールを設定するため、Firewalld 稼働中が前提です。 |
[root@dlp ~]#
umask 077
# サーバー用プライベートキー作成 [root@dlp ~]# wg genkey | tee /etc/wireguard/server.key SLHWNxUmoTXL1eUh4s0MvYEqlC0YuJYltmhLX2n8X0I= # サーバー用パブリックキー作成 [root@dlp ~]# cat /etc/wireguard/server.key | wg pubkey | tee /etc/wireguard/server.pub C8N7dSeUDtIVGVqD9hxVTbX9zZpqYOdeiPnFU782iQw= # クライアント用プライベートキー作成 [root@dlp ~]# wg genkey | tee /etc/wireguard/client.key uHd/504vB6m9AlBRIsf8x0+oESwvT29NNfw8o28QxHk= # クライアント用パブリックキー作成 [root@dlp ~]# cat /etc/wireguard/client.key | wg pubkey | tee /etc/wireguard/client.pub ma2n4UkzUAcWp4E6z4R0RbF0cBwDXr4yEOxBXRx9zwc= # ネットワーク インターフェース 確認 [root@dlp ~]# 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:76:3b:03 brd ff:ff:ff:ff:ff:ff inet 10.0.0.30/24 brd 10.0.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 # アクティブゾーン 確認 [root@dlp ~]# firewall-cmd --get-active-zone public interfaces: eth0 # 設定ファイル新規作成 # [wg0.conf] ⇒ [(VPN インターフェース名).conf] のルール内で任意の名称で OK [root@dlp ~]# vi /etc/wireguard/wg0.conf [Interface] # 生成したサーバー用プライベートキーを指定 PrivateKey = SLHWNxUmoTXL1eUh4s0MvYEqlC0YuJYltmhLX2n8X0I= # VPN インターフェースに割り当てる IP アドレス Address = 172.16.100.1 # サーバーでリスンする UDP ポート ListenPort = 51820 # WireGuard 起動後/終了後に任意のコマンドを実行可能 # 以下はローカルネットワークへのルーティングルールを設定 # [--zone=***] ⇒ アクティブゾーン名 # [wg0] ⇒ VPN インターフェース名 # [eth0] ⇒ イーサネット インターフェース名 PostUp = firewall-cmd --zone=public --add-masquerade; firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i wg0 -o eth0 -j ACCEPT; firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE; firewall-cmd --add-port=51820/udp PostDown = firewall-cmd --zone=public --remove-masquerade; firewall-cmd --direct --remove-rule ipv4 filter FORWARD 0 -i wg0 -o eth0 -j ACCEPT; firewall-cmd --direct --remove-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE; firewall-cmd --remove-port=51820/udp [Peer] # クライアント用パブリックキーを指定 PublicKey = ma2n4UkzUAcWp4E6z4R0RbF0cBwDXr4yEOxBXRx9zwc= # 接続を許可するクライアントの VPN の IP アドレス # サブネット単位でも指定可 ⇒ [172.16.100.0/24] AllowedIPs = 172.16.100.5, 172.16.100.6 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:76:3b:03 brd ff:ff:ff:ff:ff:ff inet 10.0.0.30/24 brd 10.0.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.1/32 scope global wg0 valid_lft forever preferred_lft forever |
Sponsored Link |