Jak wykorzystać tunel TUN / TAP z programu użytkownika?


9

Niedawno odkryłem istnienie interfejsów Linux TUN / TAP i wciąż próbuję je zrozumieć. Wydaje mi się, że mam podstawową koncepcję - tworzone są pseudo urządzenia, które emulują interfejs sieciowy i zamiast przekazywać dane do sprzętu, są przekazywane do programu przestrzeni użytkownika.

Jak skierowałbyś niepowiązany program do korzystania z tego tunelu?

Na przykład przed utworzeniem tunelu mój system zawiera tylko eth0 i lo, normalny interfejs Ethernet (podłączony do mojej sieci lokalnej) i interfejs pętli zwrotnej. Po tym, jak program utworzy i skonfiguruje tunel, mam nowy interfejs gr0, który podałem adres IP, który jest w mojej sieci lokalnej, ale nie jest używany (więc wszyscy jesteśmy w tej samej podsieci). Jak sprawić, by niepowiązany program wykorzystał ten „tunel”? Załóżmy, że mam prostą aplikację do przesyłania komunikatów klient / serwer w języku Python, która korzysta z połączenia TCP. Jak mogę go skonfigurować do korzystania z tunelu?

Przepraszam, że brakuje mi czegoś podstawowego, ale jak zwykle udało mi się pomylić z planem rzeczy. Znowu wszystko, czego chcę, to prosty program TCP wykorzystujący ten tunel.

Dzięki!

Odpowiedzi:


7

Nie zawsze jest to „tunel”. TUN / TAP to tylko określone sterowniki karty sieciowej. Z punktu widzenia stosu sieciowego działają one jak każdy inny interfejs sieciowy: mogą mieć adresy IP, mogą być interfejsami typu punkt-punkt lub rozgłaszać. Dotyczy to również zasad routingu. Ale cały ruch, który jest zapisywany na jednym z tych interfejsów sieciowych, jest przetwarzany przez jakiś program przestrzeni użytkownika, a wszystkie dane zapisywane przez program przestrzeni użytkownika /dev/tunXwyglądają jak przychodzące pakiety stosu sieciowego.

W zwykłym tunelowaniu serwer konfiguracji i klient mają urządzenia TUN z przypisanymi adresami. Tabele routingu skonfigurowane na obu z nich kierują potrzebny ruch do tego urządzenia TUN. Kiedy pakiet jest kierowany do tun0, jądro wysyła go do programu przestrzeni użytkownika (klienta), który wysyła ten pakiet do innego programu na zdalnej maszynie (serwerze), na przykład przez połączenie TCP. Na zdalnej maszynie inny program (serwer) odbiera pakiet od klienta i zapisuje go na swoim własnym /dev/tunXurządzeniu, „wstrzykując” ten pakiet do stosu sieciowego. I tunelowany pakiet jest przetwarzany jak każdy inny.


1
Zatem odpowiedzią (dla moich celów) jest skonfigurowanie tabeli routingu w celu kierowania ruchu do tych interfejsów. Nie o to mi chodziło, ale teraz powinienem być w stanie znaleźć rozwiązanie. Doceniam także wyjaśnienie, które wyjaśnia sprawy. Dzięki!
Pan Shickadance,

2
Skończyło się na użyciu „route add <TUN IP ADDR> dev gr0”. To pozwoliło mi przekierować ruch przez nowy interfejs. Dzięki jeszcze raz!
Pan Shickadance
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.