21 сентября 2010

Настройка PPPoE соединения в Linux

Тема настройки PPPoE соединения часто обсуждаемая и по ней достаточно информации, но все же... В этом посте пойдет речь о частном случае настройки PPPoE - когда необходимо установить соединение на определенный PPPoE концентратор (в том случае когда в сети имеется несколько концентраторов), без использования графических утилит.

Для начала установим необходимые пакеты:
sudo aptitude install pppoe ppp
Далее выполним поиск имеющихся PPPoE концентраторов в сети:
sudo pppoe-discovery
...
Access-Concentrator: ac1
Got a cookie: 00 b0 f3 f8 77 fb 26 64 c8 5e 48 80 42 2e 5b a3
--------------------------------------------------
AC-Ethernet-Address: 88:43:e1:36:d9:00
Access-Concentrator: ac2
Got a cookie: c2 9c 3c db 26 06 89 f6 06 7e a0 06 ff 8a f8 17 9a 07 00 00
--------------------------------------------------
AC-Ethernet-Address: d8:d3:85:e3:85:75
...
^C <-- Нажать Ctrl+C для выхода
В моем случае видим два концентратора с именами ac1 и ac2. Предположим, что необходимо постоянно подключаться к концентратору ac2. Как это сделать? Создаем файл /etc/ppp/peers/pppoe, следующего содержания (в моем случае используя редактор vim):
sudo vim /etc/ppp/peers/pppoe

ipcp-accept-local
ipcp-accept-remote
lcp-echo-interval 30
lcp-echo-failure 5
noipdefault
usepeerdns
defaultroute
replacedefaultroute
noccp
noaccomp
noauth
persist
mtu 1492
hide-password
connect /bin/true
pty "pppoe -I eth0 -C ac2" # <-- Тут имя вашего концентратора
user ПОЛЬЗОВАТЕЛЬ # <-- Тут ваш логин
password ПАРОЛЬ # <-- Тут ваш пароль

:wq # <-- Сохраняем файл и выходим из vim

После создания файла можно пробовать устанавливать соединение, выполнив в командной строке:
sudo pon pppoe
Смотрим наличие интерфейса ppp0 в выводе команды ifconfig. Вывод команды приблизительно такой:
sudo ifconfig
...
ppp0  Link encap:Point-to-Point Protocol
  inet addr:172.22.51.19 P-t-P:94.70.254.21 Mask:255.255.255.255
  UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1472 Metric:1
  RX packets:29890 errors:0 dropped:0 overruns:0 frame:0
  TX packets:26304 errors:0 dropped:0 overruns:0 carrier:0
  collisions:0 txqueuelen:3
  RX bytes:17850149 (17.0 MiB) TX bytes:1835091 (1.7 MiB)
...
Если интерфейса ppp0 в выводе команды ifconfig нет, смотрим логи:
sudo plog
или
sudo grep ppp /var/log/syslog
Для автоматического создания PPPoE подключения при загрузке компьютера можно прописать следующие строки в /etc/network/interfaces:
auto ppp0
iface ppp0 inet ppp
  pre-up /sbin/ifconfig eth0 up
  provider pppoe

Для отключения соединения PPPoE достаточно выполнить следующую команду:
sudo poff pppoe

Если PPPoE соединение используется для организации сервиса NAT в сети, то машины за этим NATом должны иметь MTU равный 1412. Иначе возможна ситуация когда, например, некоторые www ресурсы будут недоступны пользователям за NATом. Чтобы этого избежать можно "выравнивать" MTU при помощи iptables.

Загрузку правила для iptables сделаем автоматически, при установке PPPoE соединения. А при отключении соединения будем удалять это правило из iptables.  Для этого создадим два файла. Для загрузки правила создадим файл /etc/ppp/ip-up.d/pppoemtu следующего содержания (например, при помощи редактора vim):
sudo vim /etc/ppp/ip-up.d/pppoemtu

#! /bin/sh
PATH=/sbin:/bin:/usr/bin
set -e
if [ -n "$PPP_IFACE" ]; then
  iptables -t mangle -o "$PPP_IFACE" --insert FORWARD 1 -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:1536 -j TCPMSS --clamp-mss-to-pmtu
fi

:wq # <-- Сохраняем файл и выходим из vim
Для удаления правила создадим файл /etc/ppp/ip-down.d/pppoemtu следующего содержания:
sudo vim /etc/ppp/ip-down.d/pppoemtu

#! /bin/sh
PATH=/sbin:/bin:/usr/bin
set -e
if [ -n "$PPP_IFACE" ]; then
  iptables -t mangle -L -n -v  --line-numbers | grep "TCPMSS.*$PPP_IFACE.*clamp" | cut -f1 -d " " | sort -r | xargs -n1 -r iptables -t mangle -D FORWARD
fi

:wq # <-- Сохраняем файл и выходим из vim
Чтобы правила работали надо сделать файлы исполняемыми:
sudo chmod 755 /etc/ppp/ip-up.d/pppoemtu /etc/ppp/ip-down.d/pppoemtu
Проверить наличие правила в iptables после установки соединения можно выполнив следующую команду:
sudo iptables -L -n -v -t mangle
Если нет необходимости использовать определенный PPPoE концентратор, то надо просто в файле /etc/ppp/peers/pppoe заменить строку pty "pppoe -I eth0 -C ac2" на pty "pppoe -I eth0".

Понравилась статья? Подпишись на этот блог! 

Также можно почитать:

Отправить комментарий

  © Blogger template Blue Surfing by Ourblogtemplates.com 2008

Наверх