GNU/Linux >> Znalost Linux >  >> Linux

Linux – výstupní provoz na různých rozhraních na základě cílového portu?

Moje otázka je v podstatě stejná jako Povolit pouze určitý odchozí provoz na určitých rozhraních.

Mám dvě rozhraní eth1 (10.0.0.2) a wlan0 (192.168.0.2).
Moje výchozí trasa je pro eth1 .
Řekněme, že chci, aby veškerý https-provoz procházel přes wlan0 .
Pokud nyní použiji řešení navržené v druhé otázce, provoz https bude procházet přes wlan0 , ale stále bude mít zdrojovou adresu eth1 (10.0.0.2). Protože tato adresa není směrovatelná pro wlan0 brány, odpovědi se nikdy nevrátí. Nejjednodušší způsob by bylo jen správně nastavit bind-addr v aplikaci, ale v tomto případě to nelze použít.

Myslím, že musím přepsat src-addr:

# first mark it so that iproute can route it through wlan0
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

Nyní tcpdump vidí odchozí pakety v pořádku a příchozí pakety dorazí pro 192.168.0.2, ale pravděpodobně nikdy neskončí v aplikaci, protože vše, co jsem kdy viděl, je, že aplikace znovu odesílá paket SYN, ačkoli SYN- ACK již bylo přijato.

Tak jsem si řekl, že možná musím přepsat i příchozí adresu:

iptables -A PREROUTING -t nat -i wlan0 -p tcp --sport 443 -j DNAT --to 10.0.0.2

ale ani to nefungovalo. Takže jsem se tu nějak zasekl. Nějaké návrhy?

Přijatá odpověď:

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áteční 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í.

  1. Značka je nezbytná. Nechte si to.
  2. Zdrojový NAT je také nezbytný.
  3. 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á, že ano, ale pokud ne, nejprve si jej udělejte).

Upravte /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

Linux
  1. Jak změnit port SSH v Linuxu

  2. Výstupní provoz na různých rozhraních na základě cílového portu

  3. Android – Je Android založen na Linuxu?

  1. Linux – sériový port Raspberrypi?

  2. Linux – Jsou různá jádra Linux/unix zaměnitelná?

  3. Vyčerpání síťového portu Linuxu

  1. Linux – výstup Ps Lstart změněn?

  2. Linux – různé formáty objektových souborů v Linuxu?

  3. Zkontrolujte použití portu v Linuxu