Настройка подключения интернет по протоколу L2TP в Gentoo Linux

В этой статье речь пойдет о настройке интеренет соединения по протоколу L2TP. Мною было потрачено немало времяни на то, чтобы исправить все ошибки и сделать настройки корректными в своей системе и наконецто поднять пресловутое L2TP соединение без всяких глюков и обрывов. Мне бы очень хотелось, чтобы эта статья помогла всем тем, кто зашел в тупик в решинии этого вопроса. При этом, конечно, вы должны понимать то, что делаете находясь в трезвом уме и здравом рассудке. Статья ориентирована как на обычных пользователей Linux, так и на опытных гуру Linux систем. Итак, начнем.

1. Начальная минимальная настройка

Предполагается, что у вас уже установлены следующие пакеты программ:

net-misc/dhcp

net-dialup/xl2tpd

net-dialup/pppd



Если не установлены, тогда выполняем команду # emerge -av xl2tpd ppp

dhcp - я буду использовать в качестве клиента hdcp-client

2.Условные обозначения и параметры


* eth0 - название сетевой внутренняя локальная сеть beeline(10.20.XXX.XXX)

* fallback_eth0 - адрес, назначаемый в случае неполучения его по dhcp (можно взять свои)

* GATEWAY - шлюз по умолчанию

3.Ктонфигурирование сети



Если используем службу dhcp в качестве клиента, тогда созадем следующий конфиг:


# nano /etc/dhcp/dhclient.conf
timeout 40;
retry 30;
request subnet-mask, broadcast-address, time-offset, routers;



Конфигурируем сеть таким образом, чтобы автоматически поднималось соединение ppp0 по протоколу L2TP. Для этого создадим конфигурационный файл сети вида:


# nano /etc/conf.d/net
# Если планируете использовать dhcp, тогда /etc/conf.d/net примет вид:
#Ваш шлюз

GATEWAY="10.20.232.1"

#Ваш сетевой интерфейс eth0 смотрящий в локальную сеть (билайн)
config_eth0=( "dhcp" )

modules="dhclient"
dhclient_eth0="-nw"
fallback_eth0=( "10.227.xx.xx netmask 255.255.248.0" ) # не обязательно (свои адреса)

#dns для локального вашего интерфейса
dns_domain_lo="src.network.lan"

#Маршурты для интерфейса eth0 нужные для поднятия VPN соединения

# Прописываем следующие маршруты для нашей сети на интерфейсе eth0:

routes_eth0=( "default via $GATEWAY"
"85.21.230.64 via $GATEWAY"
"213.234.192.8 via $GATEWAY"
"85.21.192.3 via $GATEWAY"
#Локальная сеть
"10.0.0.0 via $GATEWAY netmask 255.0.0.0"
"10.20.232.0 via 10.20.233.99 netmask 255.255.248.0"
"10.255.255.255 via 10.20.233.99 netmask 255.255.255.255"
#corbina.ru, help.corbina.ru, home.corbina.ru
"89.179.135.67 via $GATEWAY netmask 255.255.255.255"
#сервер статистики
"195.14.50.26 via $GATEWAY netmask 255.255.255.255"
#локальные ресурсы Маска предидущая 255.255.255.240
"78.107.122.0 via $GATEWAY netmask 255.255.255.240"
"78.107.23.0 via $GATEWAY netmask 255.255.255.0"
"78.107.52.0 via $GATEWAY netmask 255.255.255.0"
#Форум homenet.corbina.net
"85.21.72.80 via $GATEWAY netmask 255.255.255.240"
#ftp.corbina.net
"195.14.50.21 via $GATEWAY netmask 255.255.255.255"
# SIP-сервер
"195.14.50.93 via $GATEWAY netmask 255.255.255.255"
# Локальные ресурсы
"85.21.90.0 via $GATEWAY netmask 255.255.255.0"
"85.21.108.0 via $GATEWAY netmask 255.255.255.0"
"85.21.78.93 via $GATEWAY netmask 255.255.255.255"
"85.21.78.139 via $GATEWAY netmask 255.255.255.255"
"85.21.79.0 via $GATEWAY netmask 255.255.255.0"
"85.21.79.5 via $GATEWAY netmask 255.255.255.255"
"85.21.79.12 via $GATEWAY netmask 255.255.255.255"
"85.21.79.38 via $GATEWAY netmask 255.255.255.255"
"85.21.79.39 via $GATEWAY netmask 255.255.255.255"
"85.21.79.170 via $GATEWAY netmask 255.255.255.255"
"89.179.134.64 via $GATEWAY netmask 255.255.255.240"
"89.179.135.73 via $GATEWAY netmask 255.255.255.255"
"194.67.1.0 via $GATEWAY netmask 255.255.255.0"
"194.67.18.0 via $GATEWAY netmask 255.255.255.0"
"217.118.84.0 via $GATEWAY netmask 255.255.255.0"
"224.0.0.0 via 10.20.233.99 netmask 240.0.0.0"
"233.33.210.0 via 10.20.233.99 netmask 255.255.255.0"
# Почтовый сервер
"195.14.50.16 via $GATEWAY netmask 255.255.255.255"
#Corbina.TV
"85.21.138.208 via $GATEWAY netmask 255.255.255.240"
"85.21.52.254 via $GATEWAY netmask 255.255.255.255"
"85.21.88.130 via $GATEWAY netmask 255.255.255.255"
"83.102.146.96 via $GATEWAY netmask 255.255.255.224"
"85.21.79.100 via $GATEWAY netmask 255.255.255.255"
)

dns_servers_eth0=( "213.234.192.8 85.21.192.3" )
dns_search_eth0="corbina.ru"

# Конфигурируем непосредственно соединение по протоколу L2TP с интерфейсом ppp0 config_ppp0="ppp"

#Строка соединения запуска xl2tpd
link_ppp0="pty 'xl2tpd'"

pppd_ppp0="remotename l2tp name corbina ipparam corbina connect /bin/true noauth \
nobsdcomp nodeflate nopcomp noaccomp persist maxfail 0"

postup() {

 if [ "${IFACE}" = "eth0" ]; then

# Адреса VPN-серверов берутся с DNS-сервера Корбины
     for vpnaddr in $(host vpn.corbina.net | awk '{ print $NF }'); do
       route add $vpnaddr gw $GATEWAY dev eth0;
     done;

     for vpnaddr in $(host tp.corbina.net | awk '{ print $NF }'); do
       route add $vpnaddr gw $GATEWAY dev eth0;
     done;
 fi

 if [ "${IFACE}" = "ppp0" ]; then

# Из-за того, что адрес VPN-сервера совпадает с адресом шлюза,
# создаваемый автоматически маршрут к VPN-серверу
# использует интерфейс ppp0, а не eth0, исправляем

VPN=`ifconfig | grep 'P-t-P' | awk '{print $3}' | awk -F: '{print $2}'`
route del $VPN dev ppp0

# Удаление шлюза по умолчанию в локальной сети и
# добавление шлюза по умолчанию в инет

route del default
route add default dev ppp0

 fi

 return 0

}

postdown() {

# Добавление маршрута по умолчанию в локалку

  if [ "${IFACE}" = "ppp0" ]; then
     killall xl2tpd pppd
     route add default dev eth0
  fi

 return 0

}

# Перед запуском vpn, должен быть поднят eth0

   depend_ppp0() {
   need net.eth0
}



4.Настройка соединения по протоколу L2TP



Создаем следующий конфигурационный файл xl2tpd:

# nano -w /etc/xl2tpd/xl2tpd.conf
[global]
access control = yes
auth file = /etc/xl2tpd/chap-secrets

[lac corbina]
lns = tp.internet.beeline.ru
redial = yes
redial timeout = 10
require chap = yes
require authentication = no
name = Ваш_логин_beeline
ppp debug = yes
pppoptfile = /etc/ppp/options.l2tp
refuse pap = yes
autodial = yes

Создаем файл опций xl2tpd:

# nano -w /etc/ppp/options.l2tp
name corbina
remotename l2tp
ipparam corbina
connect /bin/true
nodeflate
nobsdcomp
persist
maxfail 0
nopcomp
noaccomp
nodefaultroute
mru 1460
mtu 1460
noauth
user Ваш_логин_beeline


Создаем файлик с вашими логином и паролем
# nano -w /etc/xl2tpd/chap-secrets
#Содержимое должно иметь вид
Ваш_логин_beeline * Ваш_пароль_beeline


Итак, все настройки проверены, теперь проверям наличие у вас интерсфейса ppp0 в системе
для этого выполним команду

# ls /etc/init.d/net.ppp0

Если результат отрицательный, тогда создаем ppp0 следующей командой:

# ln -s /etc/init.d/net.lo /etc/init.d/net.ppp0

После этого, проверяем работу интернет соединения по L2TP

#/etc/init.d/net.eth0 start
#/etc/init.d/net.ppp0 start

Если что-то пошло не так, смотрим в #cat /var/log/messages и исправляем ошибки.
Отлаживаем интернет подключение командой: # xl2tpd -D

И еще, для корректной работы локальной сети после падения ppp0 интерфейса
в скрипте ip-down следует добавить строки:

# nano -w /etc/ppp/ip-down

killall pppd xl2tpd
route add default dev eth0




Для корректной работы inernet в локальной сети нужно маршрутизировать ppp0 интерфейс в качестве default.
Для этого В скрипте ip-up следует добавить строки:

# nano -w /etc/ppp/ip-up

route del default
route add default dev ppp0





В принципе, эти настройки подходят практически для любого Linux дистирибутива, нужно лишь учесть некоторые особености каждого из них. Методов инсталяции пакетов приложений, системы организации сетевых подключений итд итп.
Вот собственно и все! Удачи в настройке L2TP Всем!!! :)