2011-05-04 41 views
6

Czy jest możliwe uzyskanie dwukierunkowego tunelu IP na urządzeniach szeregowych (modemach) typu ttyS0 za pomocą narzędzia socat? Próbowałem użyć opcji TUN, ale nadal nie mogę uzyskać wyniku.socat: tunel IP przez TTY

Wszelkie sugestie są mile widziane :)

Aktualizacja:

PC1:

socat /dev/ttyUSB0,raw,echo=0,b57600,clocal TUN:192.168.1.1/24,up 

PC2:

socat /dev/ttyUSB0,raw,echo=0,b57600,clocal TUN:192.168.1.2/24,up 

Potem widziałem tun0 interfejsy z właściwego adresy na obu końcach, ale nie mogę pingować jednego fr om inne. Zamiast tego, kiedy wysyłam dane z ping -c 1 192.168.1.1 zdalnym socat procesami wyjścia i to urządzenie tun0 zostaje zniszczone. ? Wszelkie sugestie ..

Update2:

Istnieje problem kadrowanie, gdy staramy się zrobić tunel TCP/IP poprzez szeregowe z tylko socat. Gerhard Rieger, programista firmy Socat, mówi:

Obawiam się, że masz rację. tun nad gniazdem datagramowym działa, i - przez szczęście - także nad rurami. Jednak w przypadku linii szeregowej granice pakietów mogą znikać , co jest fatalne po wysłaniu danych w interfejsie tun.

Nie mogę zaoferować rozwiązania opartego na społeczności teraz, przepraszam. Jednak postaram się, aby zintegrować trochę kadrowania w późniejszym wydaniu wersja 2.

+1

Wiesz PPP (i pppd) jest zaprojektowany, aby to zrobić ... – ysdx

+0

@ysdx tak, ale pppd rozwiązuje inny problem –

Odpowiedz

7

Ha-ha, to działa, ale nie musi być jakaś magia :)

Więc skonfigurować 1st Peer z:

PC1: 
1) slattach -L -s 57600 -p slip /dev/ttyUSB0 & 
2) ifconfig sl0 up 
3) socat TUN:192.168.1.1/24,up INTERFACE:sl0 & 

... i coś takiego na 2 zajrzeć:

PC2: 
1) slattach -L -s 57600 -p slip /dev/ttyUSB0 & 
2) ifconfig sl0 up 
3) socat TUN:192.168.1.2/24,up INTERFACE:sl0 & 

A teraz, można z powodzeniem ping jeden komputer z innego:

PC1: 
1) ping -c 5 192.168.1.2 

PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data. 
64 bytes from 192.168.1.2: icmp_req=1 ttl=64 time=348 ms 
64 bytes from 192.168.1.2: icmp_req=2 ttl=64 time=551 ms 
64 bytes from 192.168.1.2: icmp_req=3 ttl=64 time=557 ms 
64 bytes from 192.168.1.2: icmp_req=4 ttl=64 time=549 ms 
64 bytes from 192.168.1.2: icmp_req=5 ttl=64 time=348 ms 

--- 192.168.1.2 ping statistics --- 
5 packets transmitted, 5 received, 0% packet loss, time 4003ms 
rtt min/avg/max/mdev = 348.116/471.143/557.128/100.177 ms 

Jest to nieco skomplikowane z powodu użycia slattach, ale w rzeczywistości każde inne rozwiązanie musi używać czegoś takiego jak slip, aby organizować kadrowanie przez linię szeregową. Na przykład PPP używa ramek podobnych do HDLC.

+0

Kiedy jesteś w punkcie używania 'slattach', dlaczego nie skonfigurować adresów w interfejsie SLIP? Widzę, że próbuję tunelować w TTY jako szybką i brudną * tymczasową * miarę, ale nie w tym rozwiązaniu. – pilona

3

w oparciu o to, co próbowałem, nie potrzebujesz towarzystwa, aby ustanowić tunel. można po prostu wykonaj następujące czynności:

PC1: 
1, sudo slattach -s 19200 -p slip -dL /dev/ttyUSB0 
2, sudo ifconfig sl0 10.0.0.1/24 up 
3, sudo route add default gw 10.0.0.254 sl0 

PC2: 
1, sudo slattach -s 19200 -p slip -dL /dev/ttyUSB0 
2, sudo ifconfig sl0 10.0.0.2/24 up 
3, sudo route add default gw 10.0.0.254 sl0 

Po ustawieniu mogę ping z PC1 PC2, i vice versa.

Istnieje jeszcze jeden warunek wstępny: jądro Linux musi mieć załadowany moduł antypoślizgowy.