【问题标题】:socat: tunnel IP through TTYsocat:通过 TTY 隧道 IP
【发布时间】:2011-05-04 22:16:27
【问题描述】:

是否可以使用 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接口上的数据输出。

我无法提供基于 socat 的解决方案 现在,对不起。但是,我会尝试 稍后整合一些框架 第 2 版发布。

【问题讨论】:

  • 您知道 PPP(和 pppd)就是为了做到这一点而设计的……
  • @ysdx 是的,但是 pppd 解决了不同的问题

标签: linux serial-port ip tunnel socat


【解决方案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 &

现在,您可以成功地从另一台 PC ping 通:

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

【讨论】:

  • 当您要使用slattach 时,为什么不在SLIP 接口上配置地址呢?我可以看到尝试在 TTY 中进行隧道作为一种快速而肮脏的 临时 措施的意义,但在此解决方案中却没有。
【解决方案2】:

根据我的尝试,您不需要 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 模块。

【讨论】:

    猜你喜欢
    • 2012-01-26
    • 2015-10-08
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    • 2014-09-03
    • 2011-08-25
    • 2013-05-26
    相关资源
    最近更新 更多