FreeBSD 14
Sponsored Link

WireGuard : サーバーの設定2024/09/20

 

シンプルで高速な 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     |
  +-----------+------------+        |
        vtnet0|10.0.0.30/24         |
              |                     |
              |       Local Network |
       +------+-----+               |
-------|  Router#1  |---------------|-----
       +------+-----+               |
              |                     |
    Internet  |  Internet           |
              |                     |
       +------+-----+               |
-------|  Router#2  |---------------|-----
       +------+-----+               |
              |       Local Network |
              |                     |
        vtnet0|192.168.10.30/24     |
  +-----------+------------+        |
  |  [ WireGuard Client ]  |wg0     |
  |                        +--------+
  |                        |172.16.100.5 (VPN IP)
  +------------------------+

[1] WireGuard をインストールします。
root@dlp:~ #
pkg install -y wireguard-tools
[2] WireGuard の設定です。
root@dlp:~ #
umask 077
# サーバー用プライベートキー作成

root@dlp:~ #
wg genkey | tee /usr/local/etc/wireguard/server.key

oAcshF4/a4LEwA8Od1OmukhrOydhWHPJqCIEEIpOL30=
# サーバー用パブリックキー作成

root@dlp:~ #
cat /usr/local/etc/wireguard/server.key | wg pubkey | tee /usr/local/etc/wireguard/server.pub

AazFOtPUm8ZM7rfqMhOYdF4UFKXENOkSB7r0LMxZNnA=
# クライアント用プライベートキー作成

root@dlp:~ #
wg genkey | tee /usr/local/etc/wireguard/client.key

eMJa2BQliS8mNFZiYrebWaCFlda9cNC9JPEvWOb3G2A=
# クライアント用パブリックキー作成

root@dlp:~ #
cat /usr/local/etc/wireguard/client.key | wg pubkey | tee /usr/local/etc/wireguard/client.pub

lFQASdqSmQhPXuEtTO8/xBVrbgpXSVZQhP9mQAbyNUw=
# ネットワーク インターフェース 確認

root@dlp:~ #
ifconfig

vtnet0: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
        options=4c07bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,TSO6,LRO,VLAN_HWTSO,LINKSTATE,TXCSUM_IPV6>
        ether 52:54:00:e6:cc:6e
        inet 10.0.0.30 netmask 0xffffff00 broadcast 10.0.0.255
        inet6 fe80::5054:ff:fee6:cc6e%vtnet0 prefixlen 64 scopeid 0x1
        media: Ethernet autoselect (10Gbase-T <full-duplex>)
        status: active
        nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
lo0: flags=1008049<UP,LOOPBACK,RUNNING,MULTICAST,LOWER_UP> metric 0 mtu 16384
        options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
        inet 127.0.0.1 netmask 0xff000000
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
        groups: lo
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>

# 設定ファイル新規作成
# [wg0.conf] ⇒ [(VPN インターフェース名).conf] のルール内で任意の名称で OK

root@dlp:~ #
vi /usr/local/etc/wireguard/wg0.conf
[Interface]
# 生成したサーバー用プライベートキーを指定
PrivateKey = oAcshF4/a4LEwA8Od1OmukhrOydhWHPJqCIEEIpOL30=
# VPN インターフェースに割り当てる IP アドレス
Address = 172.16.100.1/24
# サーバーでリスンする UDP ポート
ListenPort = 51820

[Peer]
# クライアント用パブリックキーを指定
PublicKey = lFQASdqSmQhPXuEtTO8/xBVrbgpXSVZQhP9mQAbyNUw=
# 接続を許可するクライアントの VPN の IP アドレス
# サブネット単位でも指定可 ⇒ [172.16.100.0/24]
AllowedIPs = 172.16.100.5, 172.16.100.6

root@dlp:~ #
sysrc wireguard_interfaces="wg0"

wireguard_interfaces: -> wg0
root@dlp:~ #
service wireguard enable

wireguard enabled in /etc/rc.conf
root@dlp:~ #
service wireguard start

[#] ifconfig wg create name wg0
[#] wg setconf wg0 /dev/stdin
[#] ifconfig wg0 inet 172.16.100.1/24 alias
[#] ifconfig wg0 mtu 1420
[#] ifconfig wg0 up
[#] route -q -n add -inet 172.16.100.6/32 -interface wg0
[#] route -q -n add -inet 172.16.100.5/32 -interface wg0
[+] Backgrounding route monitor

root@dlp:~ #
ifconfig

vtnet0: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
        options=4c07bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,TSO6,LRO,VLAN_HWTSO,LINKSTATE,TXCSUM_IPV6>
        ether 52:54:00:e6:cc:6e
        inet 10.0.0.30 netmask 0xffffff00 broadcast 10.0.0.255
        inet6 fe80::5054:ff:fee6:cc6e%vtnet0 prefixlen 64 scopeid 0x1
        media: Ethernet autoselect (10Gbase-T <full-duplex>)
        status: active
        nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
lo0: flags=1008049<UP,LOOPBACK,RUNNING,MULTICAST,LOWER_UP> metric 0 mtu 16384
        options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
        inet 127.0.0.1 netmask 0xff000000
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
        groups: lo
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
wg0: flags=10080c1<UP,RUNNING,NOARP,MULTICAST,LOWER_UP> metric 0 mtu 1420
        options=80000<LINKSTATE>
        inet 172.16.100.1 netmask 0xffffff00
        groups: wg
        nd6 options=109<PERFORMNUD,IFDISABLED,NO_DAD>
[3] VPN クライアントがローカルネットワークにアクセスできるよう、パケットフィルターを設定します。
root@dlp:~ #
sysctl net.inet.ip.forwarding=1

net.inet.ip.forwarding: 0 -> 1
root@dlp:~ #
echo 'net.inet.ip.forwarding=1' >> /etc/sysctl.conf

root@dlp:~ #
vi /etc/pf.conf
# 新規作成

ext_if = "vtnet0"
wg_net = "172.16.100.0/24"
set skip on lo
scrub in on $ext_if all fragment reassemble
nat on $ext_if from $wg_net to any -> ($ext_if)

root@dlp:~ #
service pflog enable

pflog enabled in /etc/rc.conf
root@dlp:~ #
service pf enable

pf enabled in /etc/rc.conf
root@dlp:~ #
service pf start

root@dlp:~ #
service pflog start
# WireGuard サーバーを仮想マシン上で起動している場合はチェックサムオフロードをオフにする

root@dlp:~ #
ifconfig vtnet0 -rxcsum -txcsum -rxcsum6 -txcsum6 -tso -lro

root@dlp:~ #
echo "ifconfig vtnet0 -rxcsum -txcsum -rxcsum6 -txcsum6 -tso -lro" >> /etc/rc.conf
関連コンテンツ