PPPoE на FreeBSD

НАчнём с того, что у нас есть. А есть у нас чертёнок ( я так ласково, в отсутствии девушки, свою FreeBSD называю =))) ) 5 или 6 ветки, по идеи это не принципиально, все настройки практически идентичны.
Чертёнок только что установлен и его конфиги девственно читы и невинны.

Из железа, любой комп, на который встанет наш чертёнок, две сетевые карты (зачем 2, потом расскажу) ( у меня в примерах будет одна intel и в системе она завётся fxp0, а другая длинк - ste0, у вас могут быть любые другие, посмотреть их названия можно через команду ifconfig), ну и любой adsl модем с lan разъёмом (dlink 300, 50x, acorp 120, 420 и таму подобное), либо прямое lan подключение к инфолайну.
Проблему usb модемов рассматривать не буду, потому что это не хилый гемор, ды и скорость у них маленькая и коннект держут плохо и вообще, я думаю, что 500-700 р это не те деньги, которые можно отдать за спокойные нервы, хорошую скорость и отсутствие дисконнектов.

Что мы с ним хотим сделать:
1) для начала просто вывести в сеть и настроить по немногу
2) сделать из него шлюз, чтобы можно было использовать инет с нескольких домашних компов (вот для этого 2 сетевухи и нада)

1. Выводим чёртика на прогулку в сеть.

Для начала нужно правильно настроить модем. Про настройки модема в форуме сказано много, но всё же повторюсь. Модем настраиваем как СЕТЕВОЙ МОСТ, он же по вражески "Bridge", назначаем модему 192.168.1.1 (обычно этот адрес стоит по умолчанию, и менять его не нужно) и отключаем DHCP сервер на нём (тот, что раздаёт ip адреса).
Далее подключаем наш модем к одной из сетевых карт, в моём случае модем подключается к сетевой карте fxp0.
Замечательно! Теперь отодвигаем бутылки с пивом и берём в руки клавиатуру.
Логинимся под root-ом и начитаем править конфиги.
Перво-наперво сделаем общие настройки системы в файле /etc/rc.conf любым текстовым редактором (лично я использую ee , для новичка он проще в использовании, чем vi , а потом привык и как то влом стало менять привычки)
Вообщем смело вбиваем в консоль комманду:

ee /etc/rc.conf

и смотрим содержимое файла. Возможно там что-то уже есть, вставленное например утилитой sysinstall или ещё чем-нибудь. По этому внимательно изучаем содержимое, исправляем всё, что нужно, дописываем того, чего не хватает.
Соответственно добавляем туда на данном этапе:

: #имя компьютера
hostname="My_server"

#описываем сетевые интерфейсы
#перечисляем имеющиеся у нас интерфейсы и присваиваем им адреса
#lo0 - loopback интерфейс, нужён всегда, оставляем как есть и
# не трогаем
#fxp0 - сетевая карта, к которой подключён инфолайн
#ste0 - сетевая карта, к которой у нас позже будет подключена
# домашняя сеть
network_interfaces="lo0 ste0 fxp0"
ifconfig_lo0="inet 127.0.0.1"
ifconfig_ste0="inet 192.168.0.1 netmask 255.255.255.0"
ifconfig_fxp0="inet 192.168.1.5 netmask 255.255.255.0"

#запускаем inetd демона, который будет принимать различные
#входящие соединения
inetd_enable="YES"


ну и сохраняем нажимая ESC и выбирая a-a (выйти - сохранить и выйти).

Далее создаём файл /etc/resolv.conf , в котором будут храниться адреса DNS серверов

touch /etc/resolv.conf

и вписываем туда собственно адреса этих самых серверов инфолайна:

: nameserver 83.217.192.2
nameserver 83.217.193.2


ну и не забываем сохранить.

Теперь можно и перезагрузиться

reboot

После перезагрузки, если всё прошло удачно, сново заходим под root-ом и смотрим, как у нас настроились сетевые интерфейсы. Для этого вводим:

ifconfig

Должны получить, чтото типо такого:
:fxp0:
flags=18843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,POLLING> mtu 1500
options=48<VLAN_MTU,POLLING>
inet 192.168.1.5 netmask 0xffffff00 broadcast 192.168.1.255
....
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
ste0:
flags=118843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,POLLING> mtu 1500
options=48<VLAN_MTU,POLLING>
inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
....
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active



так же заметим, чтоб если модем уже включен и кабель воткнут, то у сетевой карты, что подключена к нему, должно быть во флагах UP и status: active

Для верности пинганём модем:

ping 192.168.1.1

и если он нам радостно отвечает:

: PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: icmp_seq=0 ttl=255 time=3.505 ms
64 bytes from 192.168.1.1: icmp_seq=1 ttl=255 time=1.030 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=255 time=1.036 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=255 time=1.031 ms
64 bytes from 192.168.1.1: icmp_seq=4 ttl=255 time=1.083 ms


то мы, пряма как в той рекламе, всё правильно сделали! =)

Для тех у кого LAN подключение естественно пингать ничего не нужно, а в rc.conf нужно вместо
: ifconfig_fxp0="inet 192.168.1.5 netmask 255.255.255.0"



вписать просто:

: ifconfig_fxp0="up"

Но это всё были только приготовления. Теперь собственно будем настраивать само подключение в интернет, притом двумя способами: через ppp и через mpd.

Начнём собственно с настройки ррр. Я лично его использую, как временный вариант, для того, чтобы подключить к инету чёртика и далее из портов поставить mpd, обновить систему и ещё по мелочи. Но это совершенно не значит, что у Вас данный вариант не станет постоянным.

Все настройки ppp лежат в файле /etc/ppp/ppp.conf . Его та мы сейчас и будем драконить =)
открываем его в редакторе, и добавляем в конец:

: pppoe: #метка соединения
set authname ЛоГиН #здесь вместо ЛоГиН вписываем свой логин для
# соединения
set authkey ПаРоЛь #здесь вместо ПаРоЛь - свой пароль
set device PPPoE:fxp0 #fxp0 - сетевая карта, к которой
# подключен модем
set speed sync
set timeout 0
set redial 15 10000
set dial
set login
add default HISADDR
enable dns



ВНИМАНИЕ! здесь форум съедает пробелы в начале строки! Должно быть первая строчка с меткой без пробела, остальные начинаются с пробела! иначе, может не заработать!
Вписав и сохранив всё что нужно запускаем ppp вот такой командой:

ppp -ddial pppoe

и он нам отвечает

:Working in ddial mode
Using interface: tun0



Значит он запустился, создал сетевой интерфейс tun0 и начал соединяться.
Через 10-20 секунд пробуем посмотреть на плоды его стараний. Вводим

ifconfig tun0

и если в ответ видим что он соединился и получил ip адрес:
:tun0: flags=8051<<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1500
Opened by PID 90647
inet6 fe80::211:95ff:fec1:4075%ng0 prefixlen 64 scopeid 0x6
inet 87.228.**.*** --> 83.217.192.133 netmask 0xffffffff



то всё просто замечательно! пробуем пингануть например www.ru для окончательной проверки работоспособности инета.
Если же что-то не так, то нужно смотреть логи работы ppp? и уже исходя из этого думать, что не так. (Про то как посмотреть его логи, если понадобится, расскажу позже).

Всё замечательно, интернет есть, по идеи на этом можно и остановиться, но нет предела совершенству! Программа ppp работает как пользовательское приложение и по этому работает медленнее и может потреблять больше ресурсов, чем звонилка, работающая как часть ядра. По этому теперь займёмся установкой и настройкой самой лучшей программы - звонилки для FreeBSD - mpd.

Сейчас мы её будем САМИ компилировать из ИСХОДНЫХ КОДОВ! Что классно звучит?? ДА! вот она сила опен-сорса! и это не так сложно, как кажется с первого взгляда.

Вообщем мы уже имеем работающий инет, для того, чтобы скачать исходные коды mpd. Скачивать и собирать будем с помощи системы портов - одного из гениальнейших изобретений создателей FreeBSD (я надеюсь вы порты поставили при установке системы??? ).
Но хватит слов, переходим к делу!

переходим в директорию с портом mpd коммандой:

cd /usr/ports/net/mpd

и подаём команду компиляции демона, в процессе которой исходные коды сами скачаются из интернета и скомпилируются и установятся:

make install

наблюдаем за тем, как сыпется матрица =)) По завершению, смотрим, если в конце не появилось надписей error то всё отлично и у нас всё получилось! даём команду:

make clean

чтобы компилятор убрал за собой весь мусор и временные файлы.

Теперь нужно настроить mpd. Все конфигурационные файлы демона находятся в папке /usr/local/etc/mpd/ . Всего их 3 штуки. Создадим и заполним их поочереди.

создаём первый:

touch /usr/local/etc/mpd/mpd.secret

и записываем в него наш логин и пароль для соединения:

echo ЛоГиН ПаРоЛь > /usr/local/etc/mpd/mpd.secret

Следующим создаём файл основных настроек:

touch /usr/local/etc/mpd/mpd.conf

и в него записываем редактором следующее

:default:
load pppoe
pppoe:
new -i ng0 pppoe pppoe
set iface addrs 1.1.1.1 2.2.2.2
load inet
inet:
set iface disable on-demand
set iface idle 0
set iface route default
set bundle disable multilink
set bundle authname ЛоГиН #здесь наш логин для подключения
set link yes acfcomp protocomp
set ipcp yes vjcomp
set ipcp ranges 0.0.0.0/0 0.0.0.0/0
set ccp yes mppc
set ccp yes mpp-e40
set ccp yes mpp-e128
set ccp yes mpp-stateless
open iface




ОПЯТЬ ВНИМАНИЕ!!! Здесь строки с метками (default: pppoe: inet:) начинаются как обычно с начала строки, без каких либо пробелов и табов. ВСЕ ОСТАЛЬНЫЕ СТРОКИ НАЧИНАЮТСЯ С ОТСТУПА СДЕЛАННОГО КНОПКОЙ TAB И НИКАК ИНАЧЕ!!! Я в своё время с этим табом протр***ся целых два дня, пока не вкурил в чём проблема!

и остался последний файл

touch /usr/local/etc/mpd/mpd.links


и его содержимое:

:pppoe:
set link type pppoe
set pppoe iface fxp0 #fxp0 - имя инфолайновской сетевой карты
set pppoe service *
set pppoe disable incoming
set pppoe enable originate



ОПЯТЬ ВНИМАНИЕ!!! Всё что написано выше про табы не забываем! Здесь с начала строки метка pppoe: , всё остальное начинается с отступа табом.
Теперь почти всё готово для запуска mpd.

Донастроим систему, чтобы она запускала mpd при старте системы. Добавим в файл /etc/rc.conf строчки:

:mpd_flags="-b"
mpd_enable="YES"



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

Теперь перезагрузим систему, для того, чтобы все настройки приминились:

reboot

После перезагрузки проверим как поживает инет:

ifconfig ng0

и если всё ОК, то получаем радостный ответ:

:
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1492
inet6 fe80::211:95ff:fec1:4075%ng0 prefixlen 64 scopeid 0x6
inet 87.228.*.* --> 83.217.192.133 netmask 0xffffffff


На этом настройку инета можно считать завершённой.

Обновлено: 12.03.2015