是否可以使用 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设备被破坏了。有什么建议么?..
ping -c 1 192.168.1.1
socat
更新2:
当我们尝试仅使用socat通过串行方式建立TCP / IP隧道时,就会出现帧问题。socat的开发人员Gerhard Rieger对我说:
恐怕你是对的。调整数据报套接字的工作原理,并且很幸运,也可以通过管道进行调整。但是在串行线上,数据包边界可能会消失,这在通过tun接口发送数据时是致命的。 抱歉,我现在无法提供基于socat的解决方案。但是,我将尝试在更高的版本2发行版中集成一些框架。
恐怕你是对的。调整数据报套接字的工作原理,并且很幸运,也可以通过管道进行调整。但是在串行线上,数据包边界可能会消失,这在通过tun接口发送数据时是致命的。
抱歉,我现在无法提供基于socat的解决方案。但是,我将尝试在更高的版本2发行版中集成一些框架。
哈哈,我在工作,但是需要一些魔术:)
因此,使用以下命令配置第一个对等方:
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使用起来有些棘手,但实际上任何其他解决方案都必须使用诸如slip之类的东西来组织串行线上的帧。例如,PPP使用类似HDLC的帧。
slattach