socat:通过TTY隧道IP

时间:2011-05-04 22:16:28

标签: linux serial-port ip tunnel socat

是否可以使用 socat 实用程序在类似ttyS0的串行(调制解调器)设备上获得双向IP隧道?我试图使用TUN选项,但仍无法获得结果。

欢迎任何建议:)

更新

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其他地址。而不是那样,当我发送带有ping -c 1 192.168.1.1远程socat进程出口的数据并且它的tun0设备被销毁时。有什么建议吗?..

UPDATE2:

当我们尝试使用socat进行串行TCP / IP隧道时,会出现帧错误。 socat的开发人员Gerhard Rieger告诉我:

  

我担心你是对的。 TUN   over datagram socket工作,并且 -   运气 - 也是管道。但过了   串行边界可以包   消失,发送时这是致命的   数据输出在tun接口上。

     

我无法提供基于社交的解决方案   现在,抱歉。但是,我会尝试   稍后整合一些框架   版本2发布。

2 个答案:

答案 0 :(得分:7)

哈哈,我的作品,但需要有一些魔力:)

因此,配置第一个对等方:

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 &

现在,您可以成功地从另一台PC 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的帧。

答案 1 :(得分:3)

根据我的尝试,你不需要socat建立一个隧道。 您可以执行以下操作:

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内核必须加载了slip模块。