7

是否可以使用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 设备被破坏时。有什么建议么?..

更新2:

当我们尝试仅使用 socat 建立 TCP/IP 串行隧道时,会出现框架问题。socat 的开发者 Gerhard Rieger 对我说:

恐怕你是对的。tun over 数据报套接字工作,并且 - 幸运的是 - 也通过管道。但是在串行线上,数据包边界可能会消失,这在 tun 接口上发送数据时是致命的。

抱歉,我现在无法提供基于 socat 的解决方案。不过,我会尝试在以后的第 2 版中集成一些框架。

4

2 回答 2

8

哈哈,我工作,但需要一些魔法:)

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

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 的帧。

于 2011-05-06T00:28:28.773 回答
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 模块。

于 2014-02-28T11:09:32.653 回答