Corbina VPN поднятие интернета под Gentoo
Провайдер Corbina Telecom (ныне принадлежит Вымпелкому) работает по технологии VPN. Начал пользоваться этим замечательным провайдером в декабре 2007 года, но вот статью по настройке соединения пишу только сейчас, и то потому, что со дня на день собираюсь уйти в Onlime, которая работает по технологии DHCP.
Предварительные настройки gentoo для работы по vpn
Сперва необходимо поставить все необходимые пакеты, для успешной работы в Корбине.
Используя стандартный emerge ставим эти пакеты.
Теперь переходим к настройке конфигурационных файлов. Всех тех служб, которые мы установили.
Конфигурационные файлы и службы, которые надо настроить
Для корректной работы интернета нам потребуются следующие конфигурационные файлы:
- /etc/dhcp/dhclient.conf
- /etc/conf.d/net
- /etc/xl2tpd/xl2tpd.conf
- /etc/ppp/options.l2tp
Причём, если такого файла у вас нет изначально, то создайте его!
Начнём с настройки DHCP клиента
timeout 40;
retry 30;
request subnet-mask, broadcast-address, time-offset, routers;
Самое интересное - основные сетевые настройки - 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
}
Под себя нужно в конфиге изменить:
- eth0 - название сетевого интерфейса
- fallback_eth0 - адрес, назначаемый в случае неполучения его по dhcp (можно взять из своих же, выданных ранее).
- username_ppp0='Ваш логин в корбине'
- password_ppp0='Ваш пароль в корбине'
- GATEWAY - шлюз по умолчанию
Так же для избежание автоматического запуска необходимо переименовать или перенести в другое место файлы /etc/ppp/ip-up.local и /etc/ppp/ip-down.local
Конфигурирование L2TP
[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
Ну и последний конфиг 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 должен запускаться =).
Настройка FireWall IpTables (ppp и mtu)
Если вы подключили к интернету ваш компьютер и он не является сервером или роутером и не раздаёт интернет другим компьютерам в вашей домашней сети, то волноваться нет причины. Всё будет работать на ура.
Однако, если ваш компьютер ещё попутно выполняет функции сервера, то тут будут проблемы. Сам ваш сервер будет выходить на любые сайты, а вот компьютеры, которым он раздаёт интернет не смогут этого сделать. Симпотому будут примерно такие:
- Все сайты пингуются
- Некоторые даже открываются с невероятными задержками и скрипами
- Некоторые сайты открываются на половину. То есть успевет дойти часть HTML кода до вас в виде http заголовков.
Сколько же времени я потратил и намучался с этой проблемой. Просто врагу не пожелаешь такого гемороя. И главное не ясно что и где копать и рыть. В итоге оказалось, что MTU у технологии PPP не 1500 как обычно. Если посмотреть в конфигурационные файлы выше, то можно созерцать цифру 1460.
Для решения этой проблемы в ваш фаерволл IpTables надо добавить следующее правило:
Более подробно прочитать про эту проблему можно вот тут, а здесь можно узать более подробно, что такое TCPMSS
Далее сохраняем внесённые изменения
и рестартуем IpTables
Настройка переподнятия интерфейса в случае его падения
Вообще указанные выше конфигурационные файлы должны делать всю работу сами, однако, как это часто бывает "должны", но не делают. Для этого я в Cron добавил следующую задачу, которая автоматом раз в 10 минут проверяет, если пинг до яндекса и, если его нет, переподнимает наш интерфейс.
*/10 * * * * (ping ya.ru -c 5 | grep "rtt min/avg/max/mdev" ) || /etc/init.d/net.ppp0 restart
После внесения изменений в настройки крона - делаем его рестарт:
Возможные ошибки
Различные ошибки, баги и косяки, которые могут возникнуть при работе по впн Корбины.
Зависание конекта по L2TP
Основная ошибка которая может возникать это не верное срабатывание соединения по l2tp с VPN сервером - tp.corbina.net. В таком случае есть смысл либо несколько раз переконекчиваться в надежде что DNS сбросит на рабочий сервак либо попробовать вот эти адреса l2tp серверов: 85.21.0.251-255
Недостатки данного подхода настройки нтернета
Данный способ настройки интернета в Корбине в принципе более чем хороший, работает отлично, обеспечивал мне, по крайней мере, долгую и хорошую бесперибойную работу. Однако, у него замечен один недостаток - он очень много пишет в логи разного рода мусора и различных ворнингов. Как я понял из сообщений он создаёт новый интерфейс, потом убивает его видимо.
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
- Техническая информация о сети Корбина Телеком.