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

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

GATEWAY="10.134.40.1"
config_eth0=( "dhcp" )
modules=( "dhclient" )
#avtoperehod v demona
#dhclient_eth0="-nw"
dns_servers_eth0="195.14.50.1 195.14.50.21"
#dns_servers_eth0="213.234.192.8 85.21.192.3"
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/28 via $GATEWAY" #
  #  "83.102.146.96/27 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/28 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=(
        #"nodefaultroute"
#izmenil nodefaultroute na defaultroute t.k. ranshe ne pahalo avtomaticheskoe dobavlenie marshrutov zi-za gluka v pppd_ppp0
        "defaultroute"
#ubral usepeerdns t.k. DHCP server vydae`t ne vernye dannye i my DNS propisyvaem ze`stko
        #"usepeerdns"
        "lock"
        "noauth"
# ubiraem kompressiju
        "noaccomp"
#noaccomp disables address/control compression in both directions.
        "nopcomp"
#nopcomp disables protocol field compression negotiation, in both the receive and the transmit direction
# zapretit vse` krome MSCHAPv2
        "refuse-eap"
        "refuse-chap"
        "refuse-mschap"
# zapretit protokoly szatija
        "nobsdcomp"
        "nodeflate"
        "debug"
#perepodnimat do upora
        "persist"
        "maxfail 0"
# vremia v sekundah mezdu popytkami perepodniatija upavshego VPN
        "holdoff 10"
# Cherez kakoj interval vremeni v sekundah posylat zaprosy chtoby proverit ziv li kanal ili net
        "lcp-echo-interval 10"
# esli lcp-echo-failure pingov ne proshlo znachit kanal otvalilsia i ego nado perepodnimat
        "lcp-echo-failure 9"
)

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 | grep has | awk '{ print $NF }'); do route add $vpnaddr gw $GATEWAY dev eth0; done;
        for vpnaddr in $(host tp.corbina.net | grep has | 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 v 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