mirror of
https://github.com/bol-van/zapret.git
synced 2024-12-23 23:04:23 +00:00
wireguard docs: nftables complex case without SNAT
This commit is contained in:
parent
414bfa6dee
commit
da05000c7f
@ -284,7 +284,7 @@ cat << EOF | nft -f -
|
|||||||
EOF
|
EOF
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
|
||||||
/etc/init.d/zapret restart_fw
|
# /etc/init.d/zapret restart_fw
|
||||||
|
|
||||||
|
|
||||||
--- По поводу двойного NAT ---
|
--- По поводу двойного NAT ---
|
||||||
@ -350,6 +350,10 @@ connmark относится к соединению, fwmark - к пакету.
|
|||||||
Если к нам приходит пакет с какого-то другого интерфейса, то восстанавливаем его connmark в fwmark по маске 0x800.
|
Если к нам приходит пакет с какого-то другого интерфейса, то восстанавливаем его connmark в fwmark по маске 0x800.
|
||||||
И теперь он подпадает под правило ip rule, заворачиваясь на wgvps, что и требовалось.
|
И теперь он подпадает под правило ip rule, заворачиваясь на wgvps, что и требовалось.
|
||||||
|
|
||||||
|
Альтернативное решение - использовать на VPSке для проброса портов не только DNAT, но и SNAT/MASQUERADE. Тогда source address
|
||||||
|
будет заменен на 192.168.254.1. Он по таблице маршрутизации пойдет на wgvps. Но в этом случае клиентские программы,
|
||||||
|
на которые осуществляется проброс портов, не будут видеть реальный IP подключенца.
|
||||||
|
|
||||||
--/etc/firewall.user----------------------------
|
--/etc/firewall.user----------------------------
|
||||||
. /opt/zapret/init.d/openwrt/functions
|
. /opt/zapret/init.d/openwrt/functions
|
||||||
|
|
||||||
@ -376,9 +380,53 @@ ipt PREROUTING -t mangle ! -i $DEVICE -j CONNMARK --restore-mark --nfmask 0x800
|
|||||||
ipt PREROUTING -t mangle -i $DEVICE -m conntrack --ctstate NEW -j CONNMARK --set-xmark 0x800/0x800
|
ipt PREROUTING -t mangle -i $DEVICE -m conntrack --ctstate NEW -j CONNMARK --set-xmark 0x800/0x800
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
# fw3 restart
|
# fw3 restart
|
||||||
|
|
||||||
|
Вариант nftables :
|
||||||
|
|
||||||
|
--/etc/firewall.zapret.hook.post_up----------------------------
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
. /opt/zapret/init.d/openwrt/functions
|
||||||
|
|
||||||
|
ZAPRET_NFT_TABLE=zapret
|
||||||
|
|
||||||
|
cat << EOF | nft -f - 2>/dev/null
|
||||||
|
delete chain inet $ZAPRET_NFT_TABLE my_output
|
||||||
|
delete chain inet $ZAPRET_NFT_TABLE my_prerouting
|
||||||
|
delete chain inet $ZAPRET_NFT_TABLE my_nat
|
||||||
|
EOF
|
||||||
|
|
||||||
|
network_get_device DEVICE wgvps
|
||||||
|
|
||||||
|
cat << EOF | nft -f -
|
||||||
|
add chain inet $ZAPRET_NFT_TABLE my_output { type route hook output priority mangle; }
|
||||||
|
flush chain inet $ZAPRET_NFT_TABLE my_output
|
||||||
|
add rule inet $ZAPRET_NFT_TABLE my_output oifname @wanif ip daddr @ipban meta mark set mark or 0x800
|
||||||
|
add rule inet $ZAPRET_NFT_TABLE my_output oifname @wanif tcp dport 443 meta mark set mark or 0x800
|
||||||
|
add rule inet $ZAPRET_NFT_TABLE my_output oifname @wanif meta mark set mark or 0x1000
|
||||||
|
|
||||||
|
add chain inet $ZAPRET_NFT_TABLE my_prerouting { type filter hook prerouting priority mangle; }
|
||||||
|
flush chain inet $ZAPRET_NFT_TABLE my_prerouting
|
||||||
|
add rule inet $ZAPRET_NFT_TABLE my_prerouting iifname $DEVICE ct state new ct mark set ct mark or 0x800
|
||||||
|
add rule inet $ZAPRET_NFT_TABLE my_prerouting iifname != $DEVICE meta mark set ct mark and 0x800
|
||||||
|
add rule inet $ZAPRET_NFT_TABLE my_prerouting iifname @lanif ip daddr @ipban meta mark set mark or 0x800
|
||||||
|
add rule inet $ZAPRET_NFT_TABLE my_prerouting iifname @lanif tcp dport 443 meta mark set mark or 0x800
|
||||||
|
|
||||||
|
add chain inet $ZAPRET_NFT_TABLE my_nat { type nat hook postrouting priority 100 ; }
|
||||||
|
flush chain inet $ZAPRET_NFT_TABLE my_nat
|
||||||
|
add rule inet $ZAPRET_NFT_TABLE my_nat oifname $DEVICE mark and 0x1000 == 0x1000 masquerade
|
||||||
|
EOF
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
# /etc/init.d/zapret restart_fw
|
||||||
|
|
||||||
|
К сожалению, здесь возможности nftables немного хромают. Полноценного эквивалента CONNMARK --restore-mark --nfmask
|
||||||
|
не существует. Оригинал iptables предполагал копирование одного бита 0x800 из connmark в mark.
|
||||||
|
Лучшее, что можно сделать в nftables, это копирование одного бита с занулением всех остальных.
|
||||||
|
Сложные выражения типа "meta mark set mark and ~0x800 or (ct mark and 0x800)" nft не понимает.
|
||||||
|
Об этом же говорит попытка перевода через iptables-translate.
|
||||||
|
|
||||||
Сейчас уже можно с vpn сервера пингануть ip адрес внутри локалки клиента. Пинги должны ходить.
|
Сейчас уже можно с vpn сервера пингануть ip адрес внутри локалки клиента. Пинги должны ходить.
|
||||||
|
|
||||||
Отсутствие двойного NAT значительно облегчает проброс портов с внешнего IP vpn сервера в локалку какого-либо клиента.
|
Отсутствие двойного NAT значительно облегчает проброс портов с внешнего IP vpn сервера в локалку какого-либо клиента.
|
||||||
@ -397,16 +445,13 @@ config rule
|
|||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
|
||||||
# fw3 restart
|
# fw3 restart
|
||||||
|
# /etc/init.d/zapret restart_fw
|
||||||
|
|
||||||
--/etc/network/interfaces.d/wgvps-------------
|
--/etc/network/interfaces.d/wgvps-------------
|
||||||
post-up iptables -t nat -A PREROUTING -i eth0 -p tcp -m multiport --dports 5001,5201 -j DNAT --to-destination 192.168.2.2
|
post-up iptables -t nat -A PREROUTING -i eth0 -p tcp -m multiport --dports 5001,5201 -j DNAT --to-destination 192.168.2.2
|
||||||
post-up iptables -t nat -A POSTROUTING -o $IFACE -d 192.168.2.2 -p tcp -m multiport --dports 5001,5201 -j MASQUERADE
|
|
||||||
post-up iptables -t nat -A PREROUTING -i eth0 -p udp -m multiport --dports 5001,5201 -j DNAT --to-destination 192.168.2.2
|
post-up iptables -t nat -A PREROUTING -i eth0 -p udp -m multiport --dports 5001,5201 -j DNAT --to-destination 192.168.2.2
|
||||||
post-up iptables -t nat -A POSTROUTING -o $IFACE -d 192.168.2.2 -p udp -m multiport --dports 5001,5201 -j MASQUERADE
|
|
||||||
post-down iptables -t nat -D PREROUTING -i eth0 -p tcp -m multiport --dports 5001,5201 -j DNAT --to-destination 192.168.2.2
|
post-down iptables -t nat -D PREROUTING -i eth0 -p tcp -m multiport --dports 5001,5201 -j DNAT --to-destination 192.168.2.2
|
||||||
post-down iptables -t nat -D POSTROUTING -o $IFACE -d 192.168.2.2 -p tcp -m multiport --dports 5001,5201 -j MASQUERADE
|
|
||||||
post-down iptables -t nat -D PREROUTING -i eth0 -p udp -m multiport --dports 5001,5201 -j DNAT --to-destination 192.168.2.2
|
post-down iptables -t nat -D PREROUTING -i eth0 -p udp -m multiport --dports 5001,5201 -j DNAT --to-destination 192.168.2.2
|
||||||
post-down iptables -t nat -D POSTROUTING -o $IFACE -d 192.168.2.2 -p udp -m multiport --dports 5001,5201 -j MASQUERADE
|
|
||||||
----------------------------------------------
|
----------------------------------------------
|
||||||
|
|
||||||
# ifdown wgvps ; ifup wgvps
|
# ifdown wgvps ; ifup wgvps
|
||||||
|
Loading…
Reference in New Issue
Block a user