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
  1. timeout 40;
  2. retry 30;
  3. request subnet-mask, broadcast-address, time-offset, routers;

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

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

nano /etc/conf.d/net
File: /etc/conf.d/net
  1. dns_domain_lo="homenetwork"
  2. config_eth1="192.168.0.1 netmask 255.255.255.0"
  3. #mtu_eth1=1500
  4.  
  5. GATEWAY="10.134.40.1"
  6. modules="dhclient"
  7. config_eth0="dhcp"
  8. dhcp_eth0="nontp"
  9. #avtoperehod v demona
  10. #dhclient_eth0="-nw"
  11. dns_servers_eth0="195.14.50.1 195.14.50.21"
  12.  
  13. dns_search_eth0="corbina.ru"
  14. fallback_eth0="10.134.41.247 netmask 255.255.248.0"
  15.  
  16. #bred polnyj - ne trogat
  17. #dhcp_eth0="nogateway"
  18.  
  19. # lokalnye resursy
  20. routes_eth0="
  21.    195.14.50.1 via $GATEWAY
  22.    195.14.50.21 via $GATEWAY
  23.    85.21.138.214 via $GATEWAY
  24.    85.21.138.210 via $GATEWAY
  25.    85.21.88.130 via $GATEWAY
  26.    85.21.52.254 via $GATEWAY
  27.    85.21.138.208 via $GATEWAY
  28.    83.102.146.96 via $GATEWAY
  29.    78.107.23.0/24 via $GATEWAY
  30.    195.14.50.16 via $GATEWAY
  31.    195.14.50.26 via $GATEWAY
  32.    89.179.135.67 via $GATEWAY
  33.    62.205.179.146 via $GATEWAY
  34.    85.21.79.38 via $GATEWAY
  35.    10.0.0.0/8 via $GATEWAY
  36.    85.21.79.0/24 via $GATEWAY
  37.    85.21.90.0/24 via $GATEWAY
  38.    85.21.72.80 via $GATEWAY
  39.    195.14.50.93 via $GATEWAY
  40.    78.107.69.98 via $GATEWAY
  41.    224.0.0.0/4 via $GATEWAY
  42.    172.16.16.0/24 via $GATEWAY
  43.    233.32.240.0/24 via $GATEWAY
  44.    "
  45.  
  46.  
  47. config_ppp0="ppp"
  48. #link_ppp0="pty 'pptp vpn.corbina.net --nolaunchpppd --nobuffer --loglevel 0'"
  49. link_ppp0="pty 'xl2tpd'"
  50. username_ppp0='YOUR_USERNAME'
  51. password_ppp0='YOUR_PASSWORD'
  52.  
  53.  
  54. pppd_ppp0="
  55. name corbina
  56. remotename l2tp
  57. ipparam corbina
  58. connect /bin/true
  59.  
  60. nodeflate
  61. nobsdcomp
  62. nopcomp
  63. noaccomp
  64.  
  65. noauth
  66.  
  67. user YOUR_USERNAME
  68. password YOUR_PASSWORD
  69.  
  70. mru 1500
  71. mtu 1460
  72.  
  73. nodefaultroute
  74. lock
  75.  
  76. debug
  77.  
  78. persist
  79. maxfail 0
  80. holdoff 10
  81. lcp-echo-interval 10
  82. lcp-echo-failure 10"
  83.  
  84. metric_ppp0=0
  85.  
  86. preup() {
  87. if [ "${IFACE}" = "ppp0" ]; then
  88.     /bin/mknod /dev/ppp c 108 0
  89.     route del default
  90. fi
  91. return 0
  92. }
  93.  
  94. postup() {
  95.     if [ "${IFACE}" = "eth0" ]; then
  96. # adresa VPN servakov berutsia s DNS-servera Korbiny
  97.         for vpnaddr in $(host vpn.corbina.net | awk '{ print $NF }'); do route add $vpnaddr gw $GATEWAY dev eth0; done;
  98.         for vpnaddr in $(host tp.corbina.net | awk '{ print $NF }'); do route add $vpnaddr gw $GATEWAY dev eth0; done;
  99.     fi
  100.  
  101.     if [ "${IFACE}" = "ppp0" ]; then
  102. # iz-za togo chto adres VPN servera sovpadaet s adresom shluza to sozdavaemyj avtomaticheski
  103. #  marshrut k VPN serveru ispolzuet inerfejs ppp0 a ne eth0 - ispravliaem
  104.         VPN=`ifconfig | grep 'P-t-P' | awk '{print $3}' | awk -F: '{print $2}'`
  105.         route del $VPN dev ppp0
  106. #udalenie shluza po umolchaniju v lokalku i dobavlenie shluza po umolchaniju d inet
  107.         route del default
  108.         route add default dev ppp0
  109.     fi
  110.  
  111. return 0
  112. }
  113.  
  114.  
  115. postdown() {
  116. # dobavlenie marshruta po umolchaniju v lokalku
  117.     if [ "${IFACE}" = "ppp0" ]; then
  118.        killall xl2tpd pppd
  119.         route add default dev eth0
  120.     fi
  121. return 0
  122. }
  123.  
  124.  
  125. # pered zapuskom VPN dolzen byt podniat eth0
  126. depend_ppp0() {
  127.         need net.eth0
  128. }
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
  1. [global]
  2. access control = yes
  3.  
  4. [lac corbina]
  5. lns = tp.corbina.net
  6. redial = yes
  7. redial timeout = 10
  8. require chap = yes
  9. require authentication = no
  10. name = YOUR_USERNAME
  11. ppp debug = yes
  12. pppoptfile = /etc/ppp/options.l2tp
  13. refuse pap = yes
  14. autodial = yes
Note: Опять же под себя измените ваш логин в Корбине.

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

nano /etc/ppp/options.l2tp
File: /etc/ppp/options.l2tp
  1. name corbina
  2. remotename l2tp
  3. ipparam corbina
  4. connect /bin/true
  5.  
  6. nodeflate
  7. nobsdcomp
  8. nopcomp
  9. noaccomp
  10.  
  11. noauth
  12.  
  13. user YOUR_USERNAME
  14. password YOUR_PASSWORD
  15.  
  16. mru 1500
  17. mtu 1460
  18.  
  19. nodefaultroute
  20. lock
  21.  
  22. debug
  23.  
  24. persist
  25. maxfail 0
  26. holdoff 10
  27. lcp-echo-interval 10
  28. lcp-echo-failure 10

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

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

Добавляем в автозапуск нашу 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
Note: Для настройки StaticNAT и Masquerade можно выполнить вот эти рекомендации

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

Вообще указанные выше конфигурационные файлы должны делать всю работу сами, однако, как это часто бывает "должны", но не делают. Для этого я в 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
  • Техническая информация о сети Корбина Телеком.
  • VPN Gentoo Wiki