Portál AbcLinuxu, 12. května 2025 09:24

Dotaz: Nepoužitelný IPv6 forwarding v Linuxu

18.10.2008 02:19 Andrej | skóre: 51 | blog: Republic of Mordor
Nepoužitelný IPv6 forwarding v Linuxu
Přečteno: 457×
Odpovědět | Admin

Prosím o vaše názory na následující problém:

Mám domácí IPv6 síť se serverem, který routuje ven přes 6to4. Chtěl jsem do té sítě zavolat zvenku přes SIP. S IPv6 by to mělo jít teoreticky bez problémů. Nicméně výsledek byl velmi neslavný.

Napřed jsem zkusil prostě zavolat. Nefungovalo to, což bylo zcela správné, protože tam je nastavený jednoduchý firewall (viz řetězec FORWARD). Zvenku tedy spojení skutečně navázat nešlo. Tím ovšem korektní chování končí...

[root@charon ~]# ip6tables-save
# Generated by ip6tables-save v1.4.0 on Sat Oct 18 01:15:01 2008
*mangle
:PREROUTING ACCEPT [92:18894]
:INPUT ACCEPT [10:952]
:FORWARD ACCEPT [82:17942]
:OUTPUT ACCEPT [11:1500]
:POSTROUTING ACCEPT [94:19602]
-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMIT
# Completed on Sat Oct 18 01:15:01 2008
# Generated by ip6tables-save v1.4.0 on Sat Oct 18 01:15:01 2008
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [13:1804]
-A INPUT -i lo -j ACCEPT
-A INPUT -i ath0 -j ACCEPT
-A INPUT -i eth1 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5190 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5222 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5223 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5269 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 7777 -j ACCEPT
-A INPUT -p udp -m udp --dport 7777 -j ACCEPT
-A INPUT -p ipv6-icmp -j ACCEPT
-A FORWARD -i lo -j ACCEPT
-A FORWARD -i ath0 -j ACCEPT
-A FORWARD -i eth1 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Sat Oct 18 01:15:01 2008

Pak jsem prostě (jen tak na zkoušku) povolil forwardování všech paketů, tj. vypnul firewall.

ip6tables -t filter -P FORWARD ACCEPT

Nyní by správně měly všechny hovory bez problémů fungovat. Opak byl pravdou, což je vážná chyba. Zvukové spojení (RTP) se buď nenavázalo vůbec, nebo se (nejčastěji) navázalo pouze jedním směrem, nebo bylo po cca dvou sekundách v jednom směru přerušeno.

Už výše zmíněný problém by možná stačil na obsáhlé chybové hlášení, ale zkusil jsem jen tak pro zajímavost ještě jeden špinavý trik:

ip6tables -t filter -P INPUT ACCEPT

Pak už bylo zcela jisté, že je něco špatně. Hovory totiž začaly fungovat bez problémů. Abych vyloučil dočasnou nefunkčnost sítě, obě situace jsem prověřil ještě jednou se stejným výsledkem. (Zdůrazňuji, že volaný počítač nebyl samotný server. Šlo o stroj ve „vnitřní“ síti.)

Pokud jsem něco podstatného nepřehlédl, je tohle závažný bug v kernelu. Forwardování nemá absolutně nic společného s řetězcem INPUT. Jak je vůbec možné, že se zahazují nějaké pakety, přestože je forwardování povoleno, a že teprve úplné vyřazení řetězce INPUT dá tento problém do pořádku?

Hlavní otázka je: Co s tím? Hlásit? Nebo to může mít ještě jiné příčiny?

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

18.10.2008 02:34 Ondrej 'SanTiago' Zajicek
Rozbalit Rozbalit vše Re: Nepoužitelný IPv6 forwarding v Linuxu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud pouzivas 6to4, tak jako kazdy jiny tunel je 'obalujici' paket AFAIK povazovan jako zdrojovy (resp. cilovy) v danem routeru a podle toho take prochazi netfilterem. Jinymi slovy - prichozi 'vnejsi' pakety 6to4 tunelu maji jako cil router, proto tam projdou INPUT filterem. Pak se z nich vybali vnitrni paket a ten projde FORWARD filterem a routovanim.

Tedy to je IMHO zcela v poradku.
18.10.2008 17:24 jbohac | skóre: 19 | Praha 5
Rozbalit Rozbalit vše Re: Nepoužitelný IPv6 forwarding v Linuxu
nojo, jenže ty příchozí pakety jsou IPv4, takže by je ip6tables neměly ovlivňovat... divné...
18.10.2008 17:38 Käyttäjä 11133 | skóre: 58 | blog: Ajattelee menneisyyttä
Rozbalit Rozbalit vše Re: Nepoužitelný IPv6 forwarding v Linuxu
Ale ty si nám neřekl jak máš nastavený IPv4 iptables.
18.10.2008 19:35 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Nepoužitelný IPv6 forwarding v Linuxu

To je pravda

.
[root@charon ~]# iptables-save
# Generated by iptables-save v1.4.0 on Sat Oct 18 19:33:43 2008
*nat
:PREROUTING ACCEPT [25046:7728446]
:POSTROUTING ACCEPT [180:29094]
:OUTPUT ACCEPT [833:79743]
-A POSTROUTING -o ppp0 -j SNAT --to-source 217.112.173.73
COMMIT
# Completed on Sat Oct 18 19:33:43 2008
# Generated by iptables-save v1.4.0 on Sat Oct 18 19:33:43 2008
*filter
:INPUT DROP [13487:4322121]
:FORWARD ACCEPT [104645:87372133]
:OUTPUT ACCEPT [240465:50638141]
-A INPUT -i lo -j ACCEPT
-A INPUT -i ath0 -j ACCEPT
-A INPUT -i eth1 -j ACCEPT
-A INPUT -p ipv6 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p udp -m udp --dport 5004:5013 -j ACCEPT
-A INPUT -p udp -m udp --dport 5060:5061 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5190 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5222 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5223 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5269 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5432 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 7777 -j ACCEPT
-A INPUT -p udp -m udp --dport 7777 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
COMMIT
# Completed on Sat Oct 18 19:33:43 2008
# Generated by iptables-save v1.4.0 on Sat Oct 18 19:33:43 2008
*mangle
:PREROUTING ACCEPT [405575:174786346]
:INPUT ACCEPT [287589:82843409]
:FORWARD ACCEPT [104645:87372133]
:OUTPUT ACCEPT [240465:50638141]
:POSTROUTING ACCEPT [345693:138110445]
-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMIT
# Completed on Sat Oct 18 19:33:43 2008
19.10.2008 08:50 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Nepoužitelný IPv6 forwarding v Linuxu
jste si jist ze -p ipv6 je 6to4? jinak zkuste dat jako posledni pravidlo pred ten drop nejaky logovani a uvidite co vam neprochazi. podle mne to je urcite opomenutim neceho podstatneho pro ten tunel.
In Ada the typical infinite loop would normally be terminated by detonation.
19.10.2008 14:15 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Nepoužitelný IPv6 forwarding v Linuxu

Samozřejmě. Jinak by totiž přes IPv6 nefungovalo vůbec nic. Nešel by ani ping6 zvenčí, natož abych se připojoval k mailu, webu nebo Jabberu přes IPv6. Můj server je ovšem přes IPv6 naprosto normálně dostupný. (Výše popsané potíže se týkaly počítače v LAN, do které server routuje.)

19.10.2008 14:43 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Nepoužitelný IPv6 forwarding v Linuxu
a ten ping zvenci jede taky pres ten tunel? a kdyz ten radek z iptables (ipv4) oddelate, tak ping zvenci nepojede?
In Ada the typical infinite loop would normally be terminated by detonation.
19.10.2008 16:05 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Nepoužitelný IPv6 forwarding v Linuxu
a ten ping zvenci jede taky pres ten tunel?

To přece záleží na tom, který ping. ping charon.podzimek.org půjde přes normální IPv4 síť, zatímco ping6 charon.podzimek.org půjde pochopitelně přes tunel. Nebo se ptáte, zda ping zvenčí funguje? Ano, funguje přes IPv4 i přes IPv6.

a kdyz ten radek z iptables (ipv4) oddelate, tak ping zvenci nepojede?

Přesně tak. Když jsem IPv6 poprvé nastavoval, právě na tento řádek jsem zapomněl. Dlouho jsem se divil, proč to nefunguje. :-D Je to ovšem zcela logické. Paket jde z vnějšího rozhraní a navíc není typu TCP ani UDP. Tedy nesplní žádnou podmínku a propadne se až na konec řetězce, který má ovšem policy DROP.

18.10.2008 18:16 jbohac | skóre: 19 | Praha 5
Rozbalit Rozbalit vše Re: Nepoužitelný IPv6 forwarding v Linuxu
Nemohl by ten INPUT blokovat neco jako napr. neighbour-discovery pakety z vnitrni site?

Zkusil bych na konec INPUT dat misto DROP/REJECT target LOG, a divat se do dmesg co to filtruje.

18.10.2008 19:40 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Nepoužitelný IPv6 forwarding v Linuxu

Hmmm. No, asi mi nic jiného nezbude, pokud se to v dohledné době nepodaří nějak racionálně vysvětlit... Ale žádné pakety z vnitřní sítě určitě blokovány nejsou.

Vnější rozhraní jsou eth0, ppp0 a tun6to4. (Prakticky se používá pouze ppp0 (IPv4) a tun6to4 (IPv6).)

Vnitřní rozhraní jsou ath0 a eth1. Jak je vidět na výpisech, pakety z vnitřních rozhraní se ihned přijmou.

18.10.2008 19:32 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Nepoužitelný IPv6 forwarding v Linuxu

Ne, to není v pořádku. Protokol 6to4 není TCP ani UDP. Je to prostě jiný protokol rodiny IP a na routeru (iptables pro IPv4) se všechny takové pakety propouští, aby se následně filtrovaly přes ip6tables. Nemá se kde co předem zahazovat. (A pokud se to děje, je to bug v kernelu.)

18.10.2008 23:24 Ondrej 'SanTiago' Zajicek
Rozbalit Rozbalit vše Re: Nepoužitelný IPv6 forwarding v Linuxu
Jo, to mas pravdu. V takovych pripadech je nejlepsi zkusit tam pingat a tcpdumpem se divat, kde presne se ty pakety ztraceji.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.