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 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 monitorroot@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
|
Sponsored Link |