Poniższy problem to tylko część większego rozwiązania, z którym mam problem. Wydaje się, że wszystkie inne elementy działają do tej pory, więc postaram się opisać bardzo mały kawałek, z którym mam problem.
Mam maszynę linuxową z tun0 (interfejs tunelowania) i eth0 (która jest moją domyślną bramą do Internetu).
Cel: moim celem jest otrzymywanie pakietów przychodzących z tun0 i przekazywanie ich do domyślnej bramy. Właściwie dość prosty przypadek NAT, w którym chcę „dzielić” internet z tun0, który podrabia fizyczny interfejs.
Tun został utworzony przy użyciu
sudo openvpn --mktun --dev tun0 --user USER
sudo ip addr add 10.2.0.1/24 dev tun0
sudo ip link set tun0 up
Więc mam to uruchomione, mogę pingować itp. Ponadto mam aplikację C ++, która podłącza się do tego urządzenia TUN, może czytać i pisać na nim. (fti: oto samouczek, który obserwowałem: http://backreference.org/2010/03/26/tuntap-interface-tutorial/ )
Zrzuciłem poprawne żądanie ICMP (ping) złożone do 8.8.8.8 do tablicy bajtów w C ++. Teraz, używając mojego programu, piszę go na urządzeniu tun0. Wniosek ICMP ma
- source (10.2.0.10) - więc jądro zna trasę powrotną (ta sama podsieć)
- miejsce docelowe (8.8.8.8) - DNS Google
- poprawna suma kontrolna itp. (w Wireshark / TShark pojawia się poprawnie na tun0)
Następnie mam następujące trasy:
iptables -F # flush
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface tun0 -j ACCEPT
I tutaj utknąłem :( Pakiet nie jest przekazywany do domyślnego gw (tshark widzi go tylko na otrzymanym tun0, co wydaje mi się poprawne)
Czego brakuje? Może jakieś alternatywne podejście (ale trzeba to zrobić za pomocą urządzenia tun i muszę mieć możliwość r / w). Dodatkowe informacje:
- przekazywanie jest włączone (/ proc / sys / net / ipv4 / ip_forward)
- 8.8.8.8 jest osiągalny przez eth0 (z lokalnego)
- domyślna brama jest poprawna (od ISP przez eth0)
- próbowałem wyłączyć rp_tables (echo 0> / proc / sys / net / ipv4 / conf / eth5 / rp_filter)
- i wiele innych...
Z góry dziękuję za wszelkie wskazówki!
Odpowiedzi:
Alternatywnym rozwiązaniem byłoby użycie
bridge
. Więc możesz zmostkować swój tun0 z eth0 i nie ma potrzeby nat lub ustawiania ip na tun0, po prostu umieszczasz adresy IP z tej samej podsieci eth0 i tej samej bramy, której używasz teraz na interfejsach tunelowych klientów.Polecenia do konfiguracji mostu:
www.tldp.org/HOWTO/BRIDGE-STP-HOWTO/set-up-the-bridge
źródło
Niedawno natknąłem się na ten problem (po tej samej wzmiance w artykule w pytaniu) i po lekkim kręceniu się, okazało się, że następujące polecenie umożliwia lokalne przekazywanie pakietów dla urządzenia tun.
Wiem, że jest bardzo późno, po prostu piszę tutaj, aby każdy, kto boryka się z tym samym problemem, mógł uzyskać jakąś pomoc.
źródło