特定のDockerネットワーク(10.222.111.0/24)からwg0 systemdネットワークインターフェイス、configを介してすべてのトラフィックをルーティングしようとしています。
/etc/systemd/network/30-wg0.netdev
[NetDev]
Name = wg0
Kind = wireguard
Description = Wireguard
[WireGuard]
PrivateKey = XXXX
[WireGuardPeer]
PublicKey = XXXX
AllowedIPs = 10.222.111.0/24
Endpoint = XXXX:51820
PersistentKeepalive = 25
/etc/systemd/network/30-wg0.network
[Match]
Name=wg0
[Network]
Address = 10.0.3.227/19
DNS = X.X.X.X
[Route]
Gateway = 10.0.3.227
Destination = 10.222.111.0/24
これで、インターフェースが表示され、ルーティングテーブルに正しいルートが表示されます
# ip route show
...
10.222.111.0/24 via 10.0.3.227 dev wg0 proto static
...
インターフェースは稼働中です
# networkctl status wg0
● 251: wg0
Link File: /lib/systemd/network/99-default.link
Network File: /etc/systemd/network/30-wg0.network
Type: none
State: routable (configured)
Address: 10.0.3.227
DNS: X.X.X.X
ただし、これをテストしようとすると失敗します。
# curl --interface wg0 https://ifconfig.me
# public ip of remote server
# docker network create vpn --subnet 10.222.111.0/24
# docker run --rm --dns X.X.X.X --network vpn --ip 10.222.111.110 appropriate/curl -s https://ifconfig.me
# no output
Docker runコマンドを実行したときのtcpdumpの出力:
# tcpdump -nn -i wg0 Host ifconfig.me
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wg0, link-type RAW (Raw IP), capture size 262144 bytes
08:36:16.127461 IP 10.0.3.227.33182 > 216.239.38.21.443: Flags [S], seq 1530371569, win 27600, options [mss 1380,sackOK,TS val 3454949182 ecr 0,nop,wscale 7], length 0
08:36:17.152770 IP 10.0.3.227.33182 > 216.239.38.21.443: Flags [S], seq 1530371569, win 27600, options [mss 1380,sackOK,TS val 3454950207 ecr 0,nop,wscale 7], length 0
08:36:17.152830 IP 10.0.3.227.33182 > 216.239.38.21.443: Flags [S], seq 1530371569, win 27600, options [mss 1380,sackOK,TS val 3454950207 ecr 0,nop,wscale 7], length 0
08:36:17.153083 IP 10.0.3.227.48686 > 216.239.36.21.443: Flags [S], seq 1139719299, win 27600, options [mss 1380,sackOK,TS val 3564689990 ecr 0,nop,wscale 7], length 0
08:36:18.176752 IP 10.0.3.227.48686 > 216.239.36.21.443: Flags [S], seq 1139719299, win 27600, options [mss 1380,sackOK,TS val 3564691014 ecr 0,nop,wscale 7], length 0
08:36:18.176798 IP 10.0.3.227.48686 > 216.239.36.21.443: Flags [S], seq 1139719299, win 27600, options [mss 1380,sackOK,TS val 3564691014 ecr 0,nop,wscale 7], length 0
08:36:18.176891 IP 10.0.3.227.59316 > 216.239.34.21.443: Flags [S], seq 3848190866, win 27600, options [mss 1380,sackOK,TS val 3672200215 ecr 0,nop,wscale 7], length 0
08:36:19.200840 IP 10.0.3.227.59316 > 216.239.34.21.443: Flags [S], seq 3848190866, win 27600, options [mss 1380,sackOK,TS val 3672201239 ecr 0,nop,wscale 7], length 0
08:36:19.200938 IP 10.0.3.227.59316 > 216.239.34.21.443: Flags [S], seq 3848190866, win 27600, options [mss 1380,sackOK,TS val 3672201239 ecr 0,nop,wscale 7], length 0
08:36:19.201089 IP 10.0.3.227.39842 > 216.239.32.21.443: Flags [S], seq 4281397520, win 27600, options [mss 1380,sackOK,TS val 1995655620 ecr 0,nop,wscale 7], length 0
08:36:20.224781 IP 10.0.3.227.39842 > 216.239.32.21.443: Flags [S], seq 4281397520, win 27600, options [mss 1380,sackOK,TS val 1995656643 ecr 0,nop,wscale 7], length 0
08:36:20.224894 IP 10.0.3.227.39842 > 216.239.32.21.443: Flags [S], seq 4281397520, win 27600, options [mss 1380,sackOK,TS val 1995656643 ecr 0,nop,wscale 7], length 0
^C
12 packets captured
12 packets received by filter
0 packets dropped by kernel
私は何かを逃したと確信していますが、私は何を見ることができません。部分的に基づいています https://nbsoftsolutions.com/blog/leaning-on-algo-to-route-docker-traffic-through-wireguard
私は同じ問題に直面しました、これは私がそれを機能させる方法です:
主な間違いは、ネットデバイスでAllowedIPs
をどのように使用したかでした。 AllowedIPs
は許可されるtarget IPを指定し、トラフィックをトンネリングする可能性があるためtoすべてのIPを指定する必要があるため、0.0.0.0/0
を指定する必要があります。
[Route]
セクションのDestination
行と結果のルート(10.222.111.0/24 via 10.0.3.227 dev wg0 proto static
)も間違った方法です。これにより、トラフィックtargeting10.222.111.0/24
がトラフィックの発信元ではなくWireGuardインターフェイスにルーティングされますfromそのサブネット。
sourceでフィルタリングして、DockerサブネットからのすべてのトラフィックがVPNを通過するようにするには、ネットワークファイルで[RoutingPolicyRule]
(ip rule
に相当)および[Route]
(ip route
に相当)セクションを使用できます。 、したがって、ネットワークファイルは次のようになります。
etc/systemd/network/30-wg0.netdev
:
[NetDev]
Name = wg0
Kind = wireguard
Description = Wireguard
[WireGuard]
PrivateKey = XXXX
[WireGuardPeer]
PublicKey = XXXX
AllowedIPs = 0.0.0.0/0
Endpoint = XXXX:51820
PersistentKeepalive = 25
/etc/systemd/network/30-wg0.network
:
[Match]
Name=wg0
[Network]
Address = 10.0.3.227/19
DNS = X.X.X.X
[RoutingPolicyRule]
From = 10.222.111.0/24
# Or any other unused table number
Table = 242
[Route]
# The address of the interface, same as in Address line
Gateway = 10.0.3.227
# Same table number as above
Table = 242
その構成では、curl --interface wg0
と
# docker network create vpn --subnet 10.222.111.0/24
# docker run --rm --dns X.X.X.X --network vpn appropriate/curl -s https://ifconfig.me
正常に動作するはずです(必要がないため、--ip
のdocker run
オプションを削除したことに注意してください)。
私は実際に私のソリューションに関するブログ記事を詳細な手順で書きました。必要に応じて確認できます。役立つ場合があります: https://www.eisfunke.com/article/docker-wireguard-systemd.html 。
お役に立てば幸いです。