Routuji veřejnou adresu přes Wireguard VPNku, NAT řeším až na klientském routeru. Problém je, že (asi jen některé) weby nejdou - tcpdump na Wireguard serveru ukazuje chybu:
# tcpdump -i eth0 net 5.198.130.49 (mfonline.cz - příklad webu, který se nenačítá)
08:18:48.428445 IP moje.verejna.ip.adresa.62470 > mfonline.cz.https: Flags [S], seq 2655665232, win 64240, options [mss 1460,nop,nop,sackOK], length 0
08:18:48.429469 IP mfonline.cz.https > moje.verejna.ip.adresa.62470: Flags [S.], seq 3479261243, ack 2655665233, win 29200, options [mss 1460,nop,no p,sackOK], length 0
08:18:48.439163 IP moje.verejna.ip.adresa.62470 > mfonline.cz.https: Flags [.], ack 1, win 64240, length 0
08:18:48.461100 IP moje.verejna.ip.adresa.62470 > mfonline.cz.https: Flags [P.], seq 1:184, ack 1, win 64240, length 183
08:18:48.462137 IP mfonline.cz.https > moje.verejna.ip.adresa.62470: Flags [.], ack 184, win 30016, length 0
08:18:48.464156 IP mfonline.cz.https > moje.verejna.ip.adresa.62470: Flags [.], seq 1:1461, ack 184, win 30016, length 1460
08:18:48.464189 IP ip.wireguard.serveru > mfonline.cz: ICMP moje.verejna.ip.adresa unreachable - need to frag (mtu 1412), length 556
core router -> Wireguard server -> Wireguard klient -> klientský router (NAT)
Změnil jsem tedy MTU na 1500 na WG serveru i klientovi a tím se to vyřešilo (web se načítá):
auto wg0
iface wg0 inet static
mtu 1500
pre-up ip link add $IFACE type wireguard
pre-up wg setconf $IFACE /etc/wireguard/$IFACE.conf
post-up iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Otázka: Je to správné řešení? Neskrylo to třeba jen jiný problém?
Nastavení na klientském routeru (routing mark dávám jen odchozím paketům):
/ip firewall mangle
add action=mark-connection chain=prerouting connection-mark=no-mark dst-address-list=!private-ipv4-networks in-interface=bridge-lan new-connection-mark=conn-via-vpn-public-ip-lan passthrough=yes
add action=mark-packet chain=prerouting connection-mark=conn-via-vpn-public-ip-lan in-interface=bridge-lan new-packet-mark=pkt-via-vpn-public-ip-lan-outgoing passthrough=yes
add action=mark-packet chain=prerouting connection-mark=conn-via-vpn-public-ip-lan in-interface=!bridge-lan new-packet-mark=pkt-via-vpn-public-ip-lan-incoming passthrough=yes
add action=mark-routing chain=prerouting new-routing-mark=route-via-vpn-public-ip-lan packet-mark=pkt-via-vpn-public-ip-lan-outgoing passthrough=yes
/ip firewall nat
add action=masquerade chain=srcnat connection-mark=no-mark out-interface=ether1internet
add action=src-nat chain=srcnat routing-mark=route-via-vpn-public-ip-lan to-addresses=moje.verejna.ip.adresa
/ip route
add distance=1 gateway=wireguard.client.ip routing-mark=route-via-vpn-public-ip-lan
add distance=1 gateway=internet.gw.klient
add distance=1 dst-address=moje.verejna.ip.adresa/32 type=blackhole
Děkuji.