Нуль-модемное соединение железяк

28.08.2008 13:13:57

Имеется: две железки, один Ethernet (например, подключенный к ADSL модему) шнурок в интернет. Хочется поиметь доступ в тырнет с обоих железок. Схема временная (одна из железок, например, портативная), поэтому бежать в магазин за коммутатором или второй сетевой картой лениво.

Не знаю у кого как, но у меня в комплекте с ноутбучной железкой всегда имеется с собой нуль-модемный кабель и конвертер USB<->RS232. Почему бы не воспользоваться?

Вообще, в качестве лирического отступления, у меня для таких случаев припасён ещё и USB<-->Ethernet вместе с прямым сетевым шнурком, что вообще радикально всё упрощает, но. Он меня в этот раз подвёл. Не знаю почему, я долго перетыкал шнуры, стучал в бубен, орал в монитор, но так и не добился толку. Шнуры (два штука) рабочие, адаптер USB<-->Ethernet работает в любых конфигурациях, кроме соединения с целевой железкой. ‘link down’ и всё тут.

Поэтому пришлось доставать нуль-модемный шнурок (а не помогло бы, USB<->Bluetooth вкорячил! 😀 ).

USB<->RS232 в ноутбуке, нуль-модемный шнурок в компьютер и адаптер, можно проверить соединение через minicom или cutecom. Идём дальше, надо поднять IP соединение, это к pppd. А pppd давно и заслуженно пользуется особой народной любовью. По моему опыту, это одна из самых часто поминаемых по какой-то матери программ. Любой, кто настраивал модемное соединение, а особенно какой-нибудь GPRS или, не приведи Господь, pptp, понимает, о чём речь.

Так и тут. Открыл я было PPP-HOWTO, нашёл раздел про нуль-модем и про то, как с ним всё легко и чудесно, попробовал, ну и, конечно же, ничего не получилось.

Основная проблема в том, что у pppd немеряное количество настроечных параметров. Какие-то из них установлены «по умолчанию» и лежат в /etc/ppp/options. Официальные умолчальные параметры немного корректируются от версии к версии и, разумеется, никогда не работают так как надо (сколько юзерской крови выпил один-единственный «auth«, боюсь даже предположить), дистрибутивщики, разумеется, творчески исправляют эти недостатки, в каждом дистрибутиве по-своему.

Ну а так как pppd всё что не указывается ему в параметрах будет брать «по умолчанию», каков будет эффект от одной и той же команды в разных версиях pppd из разных дистрибутивов, предсказать практически невозможно.

Стало быть, пора доставать из мега-сумки большой шаманский бубен и складной ломик.

С бубном и ломиком получилось следующее. На одной машине:

# pppd nodetach noauth nocrtscts passive lock local noccp 10.20.1.1:10.20.1.2 \
/dev/ttyUSB0 115200

И на второй:

# pppd nodetach noauth nocrtscts passive lock local noccp defaultroute 10.20.1.2:10.20.1.1 \
/dev/ttyS1 115200

Первая, условно, ведущая, вторая — ведомая. IP адреса, разумеется, по вкусу, порты тоже смотреть по конкретным соединениям. В остальные параметры специально не вдаюсь, это есть в мануале, тут просто две магические строчки, которые должны работать с некоторой вероятностью. Единственное, «nodetach«, это чтобы pppd не покидал консоль, а оставался легко доступным в ней для чёткого отображения статуса и лёгкости убиения через Ctrl-C, можно убрать, по желанию.

Ну и, здесь же можно отдублировать четыре магические строчки для быстрого поднятия NAT-а (на «ведущей» машине, разумеется):

# echo 1 >/proc/sys/net/ipv4/ip_forward
# /sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# /sbin/iptables -A FORWARD -i eth1 -o ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# /sbin/iptables -A FORWARD -i ppp0 -o eth1 -j ACCEPT

Здесь, eth1 — выход в тырнет на «ведущей» машине, ну а ppp0 — наше чудесное соединение с «ведомым» через нуль-модемный шнурок.

И всё. Пользуемся. Также нуль-модемное соединение может помочь для каких-нибудь стареньких железок, у которых встроенной сетевой карты нет.

Закомментировать

Вам бы, по-хорошему, зарегистрироваться сначала надобно, прежде чем комментарии оставлять. Но, в порядке исключения, можете попробовать с OpenID проскочить, вдруг.