socat: туннель IP через TTY - PullRequest
6 голосов
/ 05 мая 2011

Можно ли получить двунаправленный IP-туннель через ttyS0-подобные последовательные (модемные) устройства с помощью утилиты socat ?Я пытался использовать опцию 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 -c 1 192.168.1.1 удаленным socat, процесс завершается, и устройство tun0 уничтожается.Любые предложения? ..

Update2:

Существует проблема кадрирования, когда мы пытаемся сделать TCP / IP туннель через последовательный только с socat.Герхард Ригер, разработчик socat, говорит мне, что:

Боюсь, что вы правы.работает через сокет дейтаграмм, и, к счастью, также и по каналам.Но по последовательной линии границы пакетов могут исчезнуть, и это фатально при отправке данных через интерфейс tun.

Сейчас я не могу предложить решение на основе socat, извините.Однако я постараюсь интегрировать некоторые кадры в более позднюю версию 2.

Ответы [ 2 ]

7 голосов
/ 06 мая 2011

Ха-ха, я работаю, но здесь должно быть какое-то волшебство:)

Итак, настройте 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 &

... и что-то подобное на2-й узел:

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 &

И теперь вы можете успешно пропинговать один ПК с другого:

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-подобные кадры.

3 голосов
/ 28 февраля 2014

Судя по тому, что я попробовал, вам не нужен 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

После установки я могу пропинговать ПК2 с ПК1 и наоборот.

Есть еще одно предварительное условие: ядро ​​Linux должно иметь слипмодуль загружен.

...