Corbina VPN поднятие интернета под Gentoo

Материал из AlexNook
Перейти к навигацииПерейти к поиску

Провайдер Corbina Telecom (ныне принадлежит Вымпелкому) работает по технологии VPN. Начал пользоваться этим замечательным провайдером в декабре 2007 года, но вот статью по настройке соединения пишу только сейчас, и то потому, что со дня на день собираюсь уйти в Onlime, которая работает по технологии DHCP.

Предварительные настройки gentoo для работы по vpn

Сперва необходимо поставить все необходимые пакеты, для успешной работы в Корбине.

Используя стандартный emerge ставим эти пакеты.

emerge net-misc/dhcp
emerge net-dialup/ppp
emerge net-dialup/pptpclient
emerge net-dns/bind-tools
emerge net-dialup/xl2tpd

Теперь переходим к настройке конфигурационных файлов. Всех тех служб, которые мы установили.

Конфигурационные файлы и службы, которые надо настроить

Для корректной работы интернета нам потребуются следующие конфигурационные файлы:

  • /etc/dhcp/dhclient.conf
  • /etc/conf.d/net
  • /etc/xl2tpd/xl2tpd.conf
  • /etc/ppp/options.l2tp

Причём, если такого файла у вас нет изначально, то создайте его!

Начнём с настройки DHCP клиента

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

Самое интересное - основные сетевые настройки - NET

Старая версия конфигурационных файлов до перехода на OpenRC.

nano /etc/conf.d/net
File: /etc/conf.d/net
dns_domain_lo="homenetwork"
config_eth1="192.168.0.1 netmask 255.255.255.0"
#mtu_eth1=1500

GATEWAY="10.134.40.1"
modules="dhclient"
config_eth0="dhcp"
dhcp_eth0="nontp"
#avtoperehod v demona
#dhclient_eth0="-nw"
dns_servers_eth0="195.14.50.1 195.14.50.21"

dns_search_eth0="corbina.ru"
fallback_eth0="10.134.41.247 netmask 255.255.248.0"

#bred polnyj - ne trogat
#dhcp_eth0="nogateway"

# lokalnye resursy
routes_eth0="
    195.14.50.1 via $GATEWAY
    195.14.50.21 via $GATEWAY
    85.21.138.214 via $GATEWAY
    85.21.138.210 via $GATEWAY
    85.21.88.130 via $GATEWAY
    85.21.52.254 via $GATEWAY
    85.21.138.208 via $GATEWAY
    83.102.146.96 via $GATEWAY
    78.107.23.0/24 via $GATEWAY
    195.14.50.16 via $GATEWAY
    195.14.50.26 via $GATEWAY
    89.179.135.67 via $GATEWAY
    62.205.179.146 via $GATEWAY
    85.21.79.38 via $GATEWAY
    10.0.0.0/8 via $GATEWAY
    85.21.79.0/24 via $GATEWAY
    85.21.90.0/24 via $GATEWAY
    85.21.72.80 via $GATEWAY
    195.14.50.93 via $GATEWAY
    78.107.69.98 via $GATEWAY
    224.0.0.0/4 via $GATEWAY
    172.16.16.0/24 via $GATEWAY
    233.32.240.0/24 via $GATEWAY
    "


config_ppp0="ppp"
#link_ppp0="pty 'pptp vpn.corbina.net --nolaunchpppd --nobuffer --loglevel 0'"
link_ppp0="pty 'xl2tpd'"
username_ppp0='YOUR_USERNAME'
password_ppp0='YOUR_PASSWORD'


pppd_ppp0="
name corbina
remotename l2tp
ipparam corbina
connect /bin/true

nodeflate
nobsdcomp
nopcomp
noaccomp

noauth

user YOUR_USERNAME
password YOUR_PASSWORD

mru 1500
mtu 1460

nodefaultroute
lock

debug

persist
maxfail 0
holdoff 10
lcp-echo-interval 10
lcp-echo-failure 10"

metric_ppp0=0

preup() {
if [ "${IFACE}" = "ppp0" ]; then
    /bin/mknod /dev/ppp c 108 0
    route del default
fi
return 0
}

postup() {
    if [ "${IFACE}" = "eth0" ]; then
# adresa VPN servakov berutsia s DNS-servera Korbiny
        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
# iz-za togo chto adres VPN servera sovpadaet s adresom shluza to sozdavaemyj avtomaticheski
#  marshrut k VPN serveru ispolzuet inerfejs ppp0 a ne eth0 - ispravliaem
        VPN=`ifconfig | grep 'P-t-P' | awk '{print $3}' | awk -F: '{print $2}'`
        route del $VPN dev ppp0
#udalenie shluza po umolchaniju v lokalku i dobavlenie shluza po umolchaniju d inet
        route del default
        route add default dev ppp0
    fi

return 0
}


postdown() {
# dobavlenie marshruta po umolchaniju v lokalku
    if [ "${IFACE}" = "ppp0" ]; then
       killall xl2tpd pppd
        route add default dev eth0
    fi
return 0
}


# pered zapuskom VPN dolzen byt podniat eth0
depend_ppp0() {
        need net.eth0
}
Note: Файл постарался где возможно снабдить комментариями. Часть строчек (закомментированных осталась с прошлой версии конфигурационного файла, и вполне возможно их удалить. Оставил их, т.к. возможно к ним прийдётся отказтится в будущем в случае каких-то неожиданностей.

Под себя нужно в конфиге изменить:

  • eth0 - название сетевого интерфейса
  • fallback_eth0 - адрес, назначаемый в случае неполучения его по dhcp (можно взять из своих же, выданных ранее).
  • username_ppp0='Ваш логин в корбине'
  • password_ppp0='Ваш пароль в корбине'
  • GATEWAY - шлюз по умолчанию

Так же для избежание автоматического запуска необходимо переименовать или перенести в другое место файлы /etc/ppp/ip-up.local и /etc/ppp/ip-down.local

Note: Обратите внимание - первой строчкой у меня происходит попутная конфигурация интерфейса eth1, т.к. дело происходит на моём внутреннм домашнем сервачке и он попутно раздаёт инет на мой дом.

Конфигурирование L2TP

nano /etc/xl2tpd/xl2tpd.conf
File: /etc/xl2tpd/xl2tpd.conf
[global]
access control = yes

[lac corbina]
lns = tp.corbina.net
redial = yes
redial timeout = 10
require chap = yes
require authentication = no
name = YOUR_USERNAME
ppp debug = yes
pppoptfile = /etc/ppp/options.l2tp
refuse pap = yes
autodial = yes
Note: Опять же под себя измените ваш логин в Корбине.

Ну и последний конфиг L2TP.

nano /etc/ppp/options.l2tp
File: /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 YOUR_USERNAME
password YOUR_PASSWORD

Пароль и логин меняем на свой!

Настраиваем автозапуск

Добавляем в автозапуск нашу ppp0 службу. То есть по сути создаваемый нами сетевой интерфейс ppp0 должен запускаться =).

rc-update add net.ppp0 default

Настройка FireWall IpTables (ppp и mtu)

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

Однако, если ваш компьютер ещё попутно выполняет функции сервера, то тут будут проблемы. Сам ваш сервер будет выходить на любые сайты, а вот компьютеры, которым он раздаёт интернет не смогут этого сделать. Симпотому будут примерно такие:

  1. Все сайты пингуются
  2. Некоторые даже открываются с невероятными задержками и скрипами
  3. Некоторые сайты открываются на половину. То есть успевет дойти часть HTML кода до вас в виде http заголовков.

Сколько же времени я потратил и намучался с этой проблемой. Просто врагу не пожелаешь такого гемороя. И главное не ясно что и где копать и рыть. В итоге оказалось, что MTU у технологии PPP не 1500 как обычно. Если посмотреть в конфигурационные файлы выше, то можно созерцать цифру 1460.

Note: Или выполнить
ifconfig

Для решения этой проблемы в ваш фаерволл IpTables надо добавить следующее правило:

iptables -A FORWARD -o ppp0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Note: Мы добавляем правило в цепочку forward в её конец, которая пакеты в цепочке forward идущие с интерфейса ppp0 (тоесть с инета) по протоколу tcp с флагами tcp SYN,RST SYN будет по размеру подгонятся к pmtu.

Более подробно прочитать про эту проблему можно вот тут, а здесь можно узать более подробно, что такое TCPMSS

Далее сохраняем внесённые изменения

/etc/init.d/iptables save

и рестартуем IpTables

/etc/init.d/iptables.restart

Настройка переподнятия интерфейса в случае его падения

Вообще указанные выше конфигурационные файлы должны делать всю работу сами, однако, как это часто бывает "должны", но не делают. Для этого я в Cron добавил следующую задачу, которая автоматом раз в 10 минут проверяет, если пинг до яндекса и, если его нет, переподнимает наш интерфейс.

nano /etc/crontab
File: /etc/crontab
*/10 * * * *      (ping ya.ru -c 5 | grep "rtt min/avg/max/mdev" ) || /etc/init.d/net.ppp0 restart

После внесения изменений в настройки крона - делаем его рестарт:

crontab /etc/crontab

Возможные ошибки

Различные ошибки, баги и косяки, которые могут возникнуть при работе по впн Корбины.

Зависание конекта по L2TP

Основная ошибка которая может возникать это не верное срабатывание соединения по l2tp с VPN сервером - tp.corbina.net. В таком случае есть смысл либо несколько раз переконекчиваться в надежде что DNS сбросит на рабочий сервак либо попробовать вот эти адреса l2tp серверов: 85.21.0.251-255

Недостатки данного подхода настройки нтернета

Мусор в логах

Данный способ настройки интернета в Корбине в принципе более чем хороший, работает отлично, обеспечивал мне, по крайней мере, долгую и хорошую бесперибойную работу. Однако, у него замечен один недостаток - он очень много пишет в логи разного рода мусора и различных ворнингов. Как я понял из сообщений он создаёт новый интерфейс, потом убивает его видимо.

File: /var/log/syslog
Jan 26 03:25:26 router_a pppd[7291]: using channel 35023
Jan 26 03:25:26 router_a pppd[7291]: Couldn't allocate PPP unit 0 as it is already in use
Jan 26 03:25:26 router_a pppd[7291]: Using interface ppp1
Jan 26 03:25:26 router_a pppd[7291]: Connect: ppp1 <--> /dev/pts/1
Jan 26 03:25:26 router_a xl2tpd[26112]: init_network: Unable to bind socket: Address already in use. Terminating.
Jan 26 03:25:26 router_a pppd[7291]: Modem hangup
Jan 26 03:25:26 router_a pppd[7291]: Connection terminated.
Jan 26 03:25:27 router_a pppd[7291]: Script xl2tpd finished (pid 26112), status = 0x1
Jan 26 03:25:32 router_a dhclient: DHCPREQUEST on eth0 to 83.102.233.205 port 67

И так несколько раз в минуту. Логи растут быстро ;). Как решить эту проблему и откуда она берётся я так и не смог понять.

Логин и пароль

Так же серьёзным минусов является хранящиеся в открытом виде логин и пароль! Обратите на это внимание!

Ссылки

  • Тема в форуме Корбины, которая легла в основу данного мануала.
  • Решение проблемы MTU и PPPoE
  • TCPMSS
  • Техническая информация о сети Корбина Телеком.