FreeBSD
Настройка подключения к интернету через PPPoE во FreeBSD при помощи mpd5
user_anonymous:
В помощь новичкам решил описать, как настроить подключение к интернету во FreeBSD, если провайдер раздает интернет через PPPoE. Впрочем, если провайдер раздает интернет через PPtP - разница в настройках mpd будет небольшой. Что нам понадобится для работы: данные от провайдера с вашим логином, паролем и серверами ДНС, умение пользоваться текстовым редактором, права суперпользователя, установленный mpd5. На последнем пункте остановлюсь подробнее. Дело в том, что есть две программы, называемые mpd. Одна из них - это музыкальный плеер, и нам она не нужна. Вторая граздо более интересна - это основанный на подсистеме NetGraph демон для организации PPP каналов. Этот демон отличается низким потреблением ресурсов и прекрасным быстродействием. В качестве сервера PPPoE и PPtP он очень активно используется интернет-провайдерами как эффективное решение для предоставления доступа в интернет. В нашем случае он будет работать как клиент. Вообще-то с mpd в комплекте идет довольно объемистый мануал, но, к сожалению, он больше подходит тем, кто уже имеет опыт конфигурирования mpd. Поэтому я привожу тут готовый конфигурационный файл для клиента Васи Пупкина, которому провайдер предоставил учетную запись с логином vpupkin и паролем 123456
- команды, выполняющиеся при запуске - должно начинаться со startup
startup: # Установим параметры пользователя # имя пароль роль_пользователя set user vpupkin 123456 admin # Разрешим консоль на локалхосте set console self 127.0.0.1 5005
- Это настройки по умолчанию - они будут вызваны при обычном запуске
default: load pppoe_client
pppoe_client:
- PPPoE client: только исходящие соединения, автоматический реконнект,
- адреса получаются по ipcp, односторонняя аутентификация,
- маршрут по умолчанию смотрит на шлюз провайдера
create bundle static B1 set iface route default set ipcp ranges 0.0.0.0/0 0.0.0.0/0 # Запросим ДНС у удаленного сервера # Это не всегда работает :( set ipcp enable req-pri-dns set ipcp enable req-sec-dns create link static L1 pppoe set link action bundle B1 # Надо указать свои логин и пароль set auth authname vpupkin set auth password 123456 set link max-redial 0 set link mtu 1412 set link keep-alive 10 60 # Тут надо прописать свой интерфейс set pppoe iface nfe0 # Не устанавливать имя сервиса, так как мы - клиент set pppoe service "" # Запустить соединение open
Как видим, ничего особо сложного нет. Файл надо назвать mpd.conf и поместить в /usr/local/etc/mpd5 Теперь, когда у нас все готово для соединения с внешним миром, нелишне будет внести ряд ограничений на возможность внешнего мира нам нагадить. Создадим простой файервол, дабы затруднить жизнь всяческим букам и бякам. Для этого перейдите в каталог /etc и создайте файл под названием pf.conf с вот таким содержанием:
- Очень простой файервол - блокируется весь входящий трафик кроме - пинга и разрешается весь исходящий - Замените nfe0 на название вашего сетевого интерфейса
ext_if = "nfe0" pppoe_if = "ng0" set skip on lo0 set block-policy return scrub in all fragment reassemble #pass quick on lo0 block in all # Исходящий трафик pass out proto tcp from ($ext_if) to any modulate state pass out proto udp from ($ext_if) to any keep state pass out proto icmp from ($ext_if) to any keep state pass out proto tcp from ($pppoe_if) to any modulate state pass out proto udp from ($pppoe_if) to any keep state pass out proto icmp from ($pppoe_if) to any keep state # входящий трафик pass in inet proto icmp from any to ($ext_if) icmp-type echoreq keep state pass in inet proto icmp from any to ($pppoe_if) icmp-type echoreq keep state (max 10, source-track rule, max-src-nodes 10, max-src-states 10)
Маленькая тонкость, без которой будут большие проблемы - это круглые скобки вокруг имени интерфейса. Если их не поставить, то запись $ext_if раскроется в IP-адрес, присвоеный этому интерфейсу. Скобки же говорят, что в качестве параметра надо взять адрес с указанного в них интерфейса. А проблемы будут потому что правила файервола загружаются перед запуском mpd5, когда интерфейса ng0 еще не существует и, следовательно, взять адрес неоткуда.
Теперь надо отредактировать файл /etc/resolv.conf и занести туда надпись: nameserver <ip-адрес ДНС-сервера провайдера>
Последний штрих - занесение записей в rc.conf:
# активизация файервола pf_enable="YES" # Это включит нам пакетрый фильтр pf. pf_rules="/etc/pf.conf" # Тут хранятся правила файервола pf_program="/sbin/pfctl" # А это программа, которая управляет файерволом
# Запуск mpd5 при старте системы. Контролирующий скрипт - /usr/local/etc/rc.d/mpd5
mpd_enable="YES"
Теперь, если мы нигде не накосячили, у вас будет рабочий интеренет.
Nast:
Спасибо за пост - очень помог при подключении к моему прову. Немного покопался и переделал скрипт под подключение к pptp. Мож кому и пригодится.
ee /usr/local/etc/mpd5/mpd.conf
startup:
set user nast 1234 admin set console self 127.0.0.1 5005 set console open set web self 127.0.0.1 5006 set web open
default:
load pptp_client
pptpt_client:
create bundle static B1 set iface route default create link static L1 pptp set link action bundle B1 set auth authname "name" set auth password "password" set pptp peer xxx.xxx.xxx.xxx set link max-redial 0 set link mtu 1460 set link yes acfcomp protocomp set link keep-alive 60 180 open
Также изменим /etc/dhclient.conf
timeout 60; reboot 10;
retry 60; select-timeout 5; initial-interval 2;
interface "xl0" { request subnet-mask, broadcast-address, host-name; }
В строке set pptp peer xxx.xxx.xxx.xxx прописывается адрес шлюза провайдера. xl0 - интерфейс к которому подключена линия прова.