Любопытства ради решил попробовать завернуть все интерфейсы в Network Namespaces и пустить весь трафик по IPv6 через wg0. Взяв пример с сайта https://wireguard.io/netns/ , сделал unit для systemd.
[client]$ cat /etc/systemd/system/wireguard.service
[Unit]
Description=WireGuard Client
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/ip netns add vpn0
ExecStart=/bin/ip link set enp3s0 down
ExecStart=/bin/ip link set wlp2s0b1 down
ExecStart=/bin/ip link set enp3s0 netns vpn0
ExecStart=/bin/iw phy phy0 set netns name vpn0
ExecStart=/bin/ip -n vpn0 link add wg0 type wireguard
ExecStart=/bin/ip -n vpn0 link set wg0 netns 1
ExecStart=/bin/ip netns exec vpn0 wpa_supplicant -B -i wlp2s0b1 -c /etc/wpa_supplicant/wpa_supplicant-wlp2s0b1.conf
ExecStart=/bin/ip netns exec vpn0 dhcpcd wlp2s0b1
ExecStart=/bin/ip address add fc00::10/128 dev wg0
ExecStart=/bin/wg setconf wg0 /etc/wireguard/client.conf
ExecStart=/bin/ip link set wg0 up
ExecStart=/bin/ip -6 route add default dev wg0
ExecStop=/bin/ip -n vpn0 link set enp3s0 down
ExecStop=/bin/ip -n vpn0 link set wlp2s0b1 down
ExecStop=/bin/ip -n vpn0 link set enp3s0 netns 1
ExecStop=/bin/ip netns exec vpn0 iw phy phy0 set netns 1
ExecStop=/bin/killall wpa_supplicant dhcpcd
ExecStop=/bin/ip link set wg0 down
ExecStop=/bin/ip link del wg0
ExecStop=/bin/ip netns del vpn0
[Install]
WantedBy=multi-user.target
[client]$ cat /etc/wireguard/client.conf
[Interface]
PrivateKey=private_client_key
ListenPort=50510
[Peer]
PublicKey=public_server_key
EndPoint=[2a01:***136f::5]:50505
AllowedIPs=::/0
PersistentKeepalive=25
Юнит на сервере.
[server]$ cat /etc/systemd/system/wireguard.service
[Unit]
Description=WireGuard Server
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/ip link add dev wg0 type wireguard
ExecStart=/bin/ip address add fc00::5/128 dev wg0
ExecStart=/bin/wg setconf wg0 /etc/wireguard/server.conf
ExecStart=/bin/ip link set wg0 up
ExecStop=/bin/ip link set wg0 down
ExecStop=/bin/ip link del dev wg0
[Install]
WantedBy=multi-user.target
[server]$ cat /etc/wireguard/server.conf
[Interface]
PrivateKey=private_server_key
ListenPort=50505
[Peer]
PublicKey=public_client_key
AllowedIPs=::/128
После запуска сервисов handshake установлен, судя по выхлопу wg на сервере и клиенте.
[client]$ wg
interface: wg0
public key: ***
private key: (hidden)
listening port: 50505
peer: ***
endpoint: [2a01:***:136f::5]:50505
allowed ips: ::/0
latest handshake: 6 seconds ago
bandwidth: 89 B received, 328 B sent
persistent keepalive: every 25 seconds
[server]$ wg
interface: wg0
public key: ***
private key: (hidden)
listening port: 50505
peer: ***
endpoint: [2a02:***:2c88::dd1]:50510
allowed ips: ::/128
latest handshake: 4 second ago
bandwidth: 145 B received, 89 B sent
Но ping с клиента не проходит ни на fc00::5, ни на ipv6.google.com. Из Network Namespaces (NN) пинг в интернет есть, с сервера ping на клиентский ip ( 2a02:***:2c88::dd1 ) проходит, сервер из NN тоже пингуется. Forwarding на сервере включен. Пробовал включить маскарадинг, но что с ним, что без него - не завелось. Куда копать - без понятия. Ниже прикладываю некоторые логи.
[client]$ ping -6 -c 3 fc00::5
PING fc00::05(fc00::05) 56 data bytes
--- fc00::05 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2007ms
[client] # Выхлоп tcpdump -i wg0 -t -vv
IP6 (flowlabel 0xbec67, hlim 64, next-header ICMPv6 (58) payload length: 64) localhost > fc00::5: [icmp6 sum ok] ICMP6, echo request, seq 1
IP6 (flowlabel 0xbec67, hlim 64, next-header ICMPv6 (58) payload length: 64) localhost > fc00::5: [icmp6 sum ok] ICMP6, echo request, seq 2
IP6 (flowlabel 0xbec67, hlim 64, next-header ICMPv6 (58) payload length: 64) localhost > fc00::5: [icmp6 sum ok] ICMP6, echo request, seq 3
[client] # Выхлоп ip netns exec vpn0 tshark -V -i wlp2s0b1 -f «src port 50510» http://pastebin.com/9NdkZY93
[server] # Выхлоп tshark -V -i ens3 -f «src port 50510» http://pastebin.com/3nedZmvt
Т.е. пакеты все-таки на сервер попадают, но дальше они походу просто уходят в никуда.
[server]$ ifstat -s -p http://pastebin.com/3wEXb1ST
Пробовал на сервере ловить пакеты через tshark/tcpdump на wg0, но там тишина полная. В общем не знаю уже, куда копать.