2011-05-04 222 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内核必须加载滑动模块。