2011-05-04 237 views
6

是否有可能通過ttyS0類似串行(調制解調器)設備獲得一個雙向IP隧道與實用程序的社會?我嘗試使用TUN選項,但仍然無法獲得結果。socat:隧道IP通過TTY

任何建議,歡迎:)

更新:

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 

之後,我已經看到了正確的TUN0接口地址兩端,但我不能ping一個fr其他。而不是那個,當我發送數據ping -c 1 192.168.1.1遠程socat進程退出並且它的tun0設備被銷燬。 ?任何建議..

UPDATE2:

,當我們試圖使TCP/IP隧道通過串行只有socat有一個框架的問題。社區開發者Gerhard Rieger對我說:

恐怕你說得對。通過數據報套接字工作,並通過 幸運 - 也通過管道。但是在 串行線路上,數據包邊界可能會消失,並且在tun接口上發送 數據時這是致命的。

我現在不能提供基於社會的解決方案 ,對不起。不過,我會嘗試在 版本2發行版中集成一些幀。

+1

你知道PPP(和pppd的)是專門做這個...... – ysdx 2016-03-15 09:34:09

+0

@ysdx沒錯,但pppd的解決了不同的問題 – 2016-03-15 09:59:34

回答

7

呵呵,我的作品,但需要有一些神奇的:)

因此,配置由第1對:

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 & 

...和類似的東西二號同行:

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 & 

而現在,你可以成功地ping從另一個PC:

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 

這是有點棘手,因爲slattach使用,但實際上任何其他解決方案必須使用像滑的東西來組織框架通過串行線。例如,PPP使用類似HDLC的幀。

+0

當你在使用'slattach'點,爲什麼不SLIP接口上配置的地址?我可以看到試圖在TTY內隧道作爲一個快速和骯髒的*臨時*措施,但不是在這個解決方案。 – pilona 2013-09-30 03:43:09

3

根據我所嘗試的,您不需要建立隧道。 你可以做到以下幾點:

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 

設置完成後,我可以從PC1 ping通PC2,反之亦然。

還有一個先決條件:你的Linux內核必須加載滑動模塊。