PPP via NULL-modem on FreeBSD


1. Кабель
2. Проверка кабеля
3. Настройка PPP
4. Создание подключения

====================================================

Недавно возникла необходимость поднять небольшую домашнюю сетку, состоящую всего из двух машин.
Проблема была в том, что ни на одной из машин не было сетевых карт. Появилась идея соединить машинки посредством нуль-модемного кабеля.
Итак, топология сети:
---------------- NULL-modem ----------------
| Windows XP |------------>--------------| FreeBSD 5.4 |
---------------- ----------------

====================================================
1. Кабель
================
Кабель можно купить, а можно спаять самому. Я сделал его из двух коннекторов DB-9 (мама) из двухметрового куска обыкновенной витой пары.
Вот схема распайки:

2 --- 3
3 --- 2
4 --- 6
5 --- 5
6 --- 4
7 --- 8
8 --- 7

Незабудьте, кроме того, на обоих разъемах замкнуть 6 с 1.


====================================================
2. Проверка кабеля
========================

Итак, допустим кабель у нас уже есть. Сначала проверим его на работоспособность.
Для этого на сервере отредактируем файлы /etc/ttys и /etc/gettytab

/etc/ttys – находим строку с ttyd0:
...
ttyd0 "/usr/libexec/getty std.115200" dialup on secure
...

/etc/gettytab – находим секцию std.115200:
...
std.115200|115200-baud:
:hw:np:sp#115200:
...

затем выполним "kill -1 1" от имени root, чтобы заставить фришку слушать порт ttyd0 (COM1).
На клиентской машинке открываем любую терминальную прогу (например HyperTerminal), создаем соединение через порт к которому подсоединен кабель.
Параметры порта выбираем такими:

Скорость 115200
Биты данных 8
Четность нет
Стоповые биты 1
Управление потоком аппаратное

При открытии соединения на экране терминала должен появиться запрос на вход в систему.
Попробуйте войти в качестве root-а, или какого-нибудь другого пользователя.
Если вошли нормально, значит все ОК - можно приступать к настройке ppp.


======================================================
3. Настройка PPP
========================

Создадим файл /usr/local/bin/ppplogin со следующим содержанием:

#!/bin/sh
exec /usr/sbin/ppp -nat -direct nullmodem

и выполним "chmod 755 /usr/local/bin/ppplogin". Отредактируем файлы следующим образом:

/etc/gettytab – опять идем к std.115200:
...
std.115200|115200-baud:
:hw:np:sp#115200:
:pl:pp=/usr/local/bin/ppplogin:
...

/etc/ppp/ppp.conf создаем новую секцию (nullmodem – имя секции. Его, естественно, можно поменять):
nullmodem:
set device /dev/cuaa0 #### <- COM1
set speed 115200
set timeout 0
set ifaddr 11.0.0.1/32 11.0.0.2/32 255.255.255.255
enable pap

/etc/ppp/ppp.secret – создаем, если не существует:
login1 password1
login2 password2
.......

/etc/ppp/ppp.linkup – создаем, если не существует:
nullmodem:
shell /etc/ppp/addroute.sh

/etc/ppp/addroute.sh – создаем и впечатываем строчки:
#!/bin/sh
route add 11.0.0.1 -interface tun0

Выполним команды
chmod 755 /etc/ppp/addroute.sh
kill -1 1

Если еще раз попробовать установить соединение при помощи HyperTerminal-а, вместо человеческого "login: " должны появиться всякие иероглифы:

~}#@!}!}!} }<}(}"}'}"}"}&} } } } }!}$}%}%}&?'}0]}#}$@#}"-~~}#@!}!}!} }
<}(}"}' }"}"}&} } } } }!}$}%}%}&?'}0]}#}$@#}"-~~}#@!}!}!} }<}(}"}'}"}"}&}
} } } }!}$}% }%}&?'}0]}#}$@#}"-~~}#@!}!}!} }<}(}"}'}"}"}&} } } } }!

Иероглифы - это PPP-пакеты. Если они появились, значит все идет нормально.


=======================================================
4. Создание подключения
==============================

Теперь остается только создать подключение на клиенте. Итак, открываем мастер новых подключений, выбираем подключение напрямую, затем выбираем ведущий компьютер, задаем имя для подключения и жмем финиш.
Открыв подключение, перед вводом имени и пароля, необходимо его сконфигурировать. Нажав на свойства, зайдите в настройки порта и настройте его. Затем настройте сеть - задайте использование IP-адреса (11.0.0.2).


Все!

После нажатия кнопки ПОДКЛЮЧЕНИЕ сервер обнаружит соединение и, в соответствии с настройками в /etc/gettytab (pl – заставит автоматически запуститься то, что прописано в pp), запустит скрипт /usr/local/bin/ppplogin, который запустит ppp с флагом -direct, используя настройку nullmodem в ppp.conf. Клиент обнаружит PPP-пакеты и начнется проверка имени пользователя и пароля по протоколу PAP (enable pap в /etc/ppp/ppp.conf), а логин и пароль он будет брать из /etc/ppp/ppp.secret.Если логин и пароль верны,

клиент получит адрес 11.0.0.2, а сервер - 11.0.0.1.

P.S. addroute.sh используется для того, чтобы указать серверу маршрут к своему же адресу.

Все это делалось в соответствии с man-страничками ppp, gettytab и ttys, а так же сэмпл-файлы в /usr/share/examples/ppp/.

Обновлено: 12.03.2015