Jste blízko.
Skutečným důvodem, proč aplikace nevidí zpětný provoz, je vestavěná ochrana IP spoofingu v jádře. To znamená, že zpětný provoz neodpovídá směrovací tabulce, a proto je zrušen. Můžete to opravit vypnutím ochrany proti spoofingu takto:
sudo sysctl net.ipv4.conf.wlan0.rp_filter=0
Ale nedoporučoval bych to. Správnějším způsobem je vytvořit alternativní instanci směrování.
- Značka je nezbytná. Nechte si to.
- Zdrojový NAT je také nezbytný.
- Konečná DNAT je zbytečná, takže ji můžete odstranit.
Ujistěte se, že máte iproute
balíček nainstalován. Pokud máte ip
příkaz pak jste nastaveni (což vypadá, jako byste to udělali, ale pokud ne, nejprve to získejte).
Upravit /etc/iproute2/rt_tables
a přidejte novou tabulku připojením následujícího řádku:
200 wlan-route
Poté musíte nakonfigurovat svou novou směrovací tabulku s názvem wlan-route
s výchozí bránou a vytvořte pravidla pro podmíněné odesílání provozu do této tabulky. Předpokládám, že vaše výchozí brána je 192.168.0.1. Přirozeně to musí odpovídat vaší skutečné síti a ne pouze mým předpokladům.
ip route add default via 192.168.0.1 dev wlan0 table wlan-route
ip rule add fwmark 0x1 table wlan-route
Váš konečný komentovaný skript by vypadal takto:
# Populate secondary routing table
ip route add default via 192.168.0.1 dev wlan0 table wlan-route
# Anything with this fwmark will use the secondary routing table
ip rule add fwmark 0x1 table wlan-route
# Mark these packets so that iproute can route it through wlan-route
iptables -A OUTPUT -t mangle -o eth1 -p tcp --dport 443 -j MARK --set-mark 1
# now rewrite the src-addr
iptables -A POSTROUTING -t nat -o wlan0 -p tcp --dport 443 -j SNAT --to 192.168.0.2
bahamatovo řešení je správné; nicméně mějte na paměti, že jediný způsob, jak to udělat, bylo zakázat rp_filter pro každé rozhraní v systému, nejen pro dvě (v tomto případě eth1 a wlan0) zapojené do NATingu.
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 > $f; done
echo 1 > /proc/sys/net/ipv4/route/flush
(viz DŮLEŽITÁ poznámka na konci této stránky:Advanced Routing Howto -- odkaz tam zveřejněný již neexistuje, ale našel jsem ho pomocí stroje na cestu zpět)