Как соединить два сегмента локальной сети через последовательный порт, используя Linux?

583
rcm

У меня есть приложение, в котором две подсети прозрачно соединены через два моста Serial to Ethernet и нуль-модемный последовательный кабель (только RS-232, TX и RX). Эта настройка ведет себя точно так же, как кабель Ethernet, за исключением скорости и задержки.

My application diagram

Эти мосты довольно дороги для меня, и мне было интересно, как это сделать с дешевым SBC под управлением Linux (например, Raspberry Pi). Я искал дни безуспешно.

Я читал на форумах, что netcat, ppp и ser2net не справятся с этой задачей, а brctl работает только для интерфейсов Ethernet. Я думал об использовании socat или bridge-utils, но не смог найти ни одной ссылки на приложение, похожее на мое. Я видел множество приложений, в которых последовательное устройство соединено через TCP-соединение, а не наоборот, как в моем случае.

Не могли бы вы помочь мне решить эту проблему?

Мои знания в области сети являются базовыми, и я прошу прощения за любые ошибки.

6
Возможно, вам не нужно соединять соединения, чтобы делать то, что вы хотите. Предполагая, что сети находятся в разных подсетях, и при условии, что ни один из них не является маршрутизатором в своей сети, вы можете создать правила маршрутизации для отправки трафика для этой подсети на ваши машины «Serial A» и «Serial B» в соответствующих сетях. (Я предполагаю, по какой-то странной причине, что вы * должны * делать это через последовательные порты, хотя почти любые другие сетевые средства будут работать лучше с точки зрения скорости.) Jim MacKenzie 6 лет назад 1
Да, поскольку вы начинаете с "** двух ** подсетей", более вероятно, что вы хотите использовать маршрутизацию, а не мост. Мост приведет к созданию одной подсети ... Кроме того, маршрутизация IP через последовательный порт гораздо более распространена (простой pppd), чем мост через Ethernet через последовательный порт. grawity 6 лет назад 0
Привет, Джим МакКензи. Да! Есть странные причины, поэтому я должен использовать последовательные порты. Я не прояснил свой вопрос. Лучший сценарий для меня - это сценарий, в котором каждая ветвь может «видеть» другую как часть одной подсети, а не как две отдельные, поэтому я спросил о мостовом соединении. Однако, если подход с маршрутизацией работает, это будет здорово. Я не знал, что смогу сделать это с помощью pppd, я думал, что он будет работать только между двумя компьютерами. Я верну свое оборудование через несколько дней, так что я смогу попробовать его. rcm 6 лет назад 0
Привет @ Grawity, комментарий выше для вас тоже. rcm 6 лет назад 0
@rcm: Есть ли какая-то конкретная причина для одной подсети? Что именно вы подразумеваете под «видеть» здесь? grawity 6 лет назад 0
Поскольку оригинальное приложение работает таким образом, и замена существующих мостов Serial на Ethernet на новые будет иметь меньшее влияние. Все IP-адреса с обеих сторон являются фиксированными и находятся в диапазоне от 10.10.1.1/28 до 10.10.1.14/28. Я тоже попробую ваше предложение PPP, я все еще должен выяснить, как маршрутизировать пакеты. rcm 6 лет назад 0

1 ответ на вопрос

0
dirkt

Quickshot с socat, не проверено:

socat TUN:10.10.1.4/24,tun-type=tap,tun-name=tap0,iff-up /dev/ttyS0,rawer 

Затем добавьте это к мосту (скажем, br0):

ip link set tap0 master br0 

Может потребоваться некоторые модификации, если они rawerвсе еще недостаточно сырые. IIRC нужен только IP-адрес, чтобы socatосчастливить.

В качестве альтернативы, используйте некоторый протокол, созданный для работы в сети по последовательному каналу, такой как SLIP или PPP, который будет корректно экранировать забавные символы и в крайнем случае выполнять управление потоком, а затем запустить над ним туннель уровня 2. Менее эффективно и сложнее в настройке.

Привет @dirkt, я верну свое оборудование через несколько дней, так что я смогу попробовать. Спасибо. rcm 6 лет назад 0