Настройка VPN подключения l2tp на сервере Centos 6.5 (Домашний интернет Билайн)


Offtopic:

Нашел в сети статью о настройке VPN-сервер в стиле how-to (pptpd+mysql+radius) на CentOS6. Как оказалось, я совсем не шарю в этих технологиях. Хотелось бы в них разобраться и подготовить более качественные и подробные инструкции как это сделать. Буду надеяться, что кто-нибудь подключится к исследованию такого рода задач, усложнив решение использованием IPSEC, передачей маршрутов клиенту, настройкой правил локальной маршрутизации в зависимости от того, поднято ли VPN соединение или нет (+ возможно еще то, чего я не знаю, а должен). Будут желающие помочь, welcome.

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


Многое поменялось. Теперь для подключения к провайдеру не нуно настраивать l2tp. Смотри подробнее здесь
Удалять не буду, может когда еще понадобится настроить для какой-нибудь другой задачи!


Начало

Имеем компьютер с 2-я сетевыми картами.



eth0 - внешняя сеть
eth1 - внутренняя сеть


Для доступа в локальную сеть, необходимо, чтобы интерфейс eth0 получил по DHCP провайдера ip адрес и локальные маршруты.

Для доступа в интернет, необходимо авторизоваться на сервере провайдера. Для этого создается виртуальный интерфейс ppp, устанавливается ПО для авторизации.

UPD 1: появилось ощущение, что слишком много раз приходится сообщать login пользователя в конфигах! (Не странно, т.к. конфиги собирались из уже готовых примеров в интернете.) По хорошему, нужно это исправить.

UPD 2: Брас (или как он там правильно называется) tp.corbina.net, который верой и правдой служил долгие коды (а тот который рекомендовали сотрудники биллайна не работал как нужно) в последнее время (2014 год.) стал работать намного хуже. Сидишь копаешься в интернете, бац и разрыв. Бац опять разрыв. Да блять, да каждый вечер разрыв, после которого маршрутизатор (речь не про тот, что настраивается в статье) сам не поднимается и его нужно ребутить. Вообщем, чтобы не было ни единого разрыва, нужно правильно выбрать сервер для авторизации. Поменял брас, стало намного лучше.


Настройка интерфейса, подключенного к биллайн


# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
# service network restart
# host tp.corbina.net
tp.corbina.net has address 85.21.0.255
# host tp.internet.beeline.ru
tp.internet.beeline.ru has address 85.21.0.50


Инсталляция необходимого ПО


Добавляю EPEL репозиторий, т.к. в стандартном не нашел.


## EPEL Repository<br/>
## RHEL/CentOS 6 64-Bit ##


# rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# yum install -y xl2tpd
# chkconfig --level 345 xl2tpd on

Настройка


# cp /etc/xl2tpd/xl2tpd.conf /etc/xl2tpd/xl2tpd.conf.bkp
# vi /etc/xl2tpd/xl2tpd.conf
[global]
access control = yes
auth file = /etc/ppp/chap-secrets

[lac beeline]
;lns = tp.internet.beeline.ru
lns = tp.corbina.net
redial = yes
redial timeout = 10
require chap = yes
require authentication = no
name = имя_пользователя
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
require pap = no
autodial = yes
tunnel rws = 8
tx bps = 100000000
flow bit = no
# cp /etc/ppp/options.xl2tpd /etc/ppp/options.xl2tpd.bkp
# vi /etc/ppp/options.xl2tpd
asyncmap 0000
name имя_пользователя
remotename L2TP
ipparam beeline
connect /bin/true
mru 1460
mtu 1460
nodeflate
nobsdcomp
persist
maxfail 0
nopcomp
noaccomp
noauth
novj
novjccomp
noipx
nomp
refuse-eap
refuse-pap
unit 0
# cp /etc/ppp/chap-secrets /etc/ppp/chap-secrets.bkp
# vi /etc/ppp/chap-secrets
имя_пользователя * пароль *
# service xl2tpd start

Ждем получения ip адреса (по разному от сразу до 3-х минут).

# less /var/log/messages
Jan  5 21:00:07 gateway pppd[7958]: local  IP address 95.31.31.8
Jan  5 21:00:07 gateway pppd[7958]: remote IP address 85.21.0.243

Появляется интерфейс ppp0

# ifconfig ppp
ppp0      Link encap:Point-to-Point Protocol
          inet addr:95.31.31.8  P-t-P:78.107.1.154  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1460  Metric:1
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0
          TX packets:87540191 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:30 (30.0 b)  TX bytes:39058515021 (36.3 GiB)

Таблица маршрутизации выглядит следующим образом

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
bras409-l0.msk. *               255.255.255.255 UH    0      0        0 ppp0
192.168.2.0     *               255.255.255.0   U     0      0        0 eth1
10.111.0.0      *               255.255.248.0   U     0      0        0 eth0
link-local      *               255.255.0.0     U     1002   0        0 eth0
link-local      *               255.255.0.0     U     1003   0        0 eth1
default         10.111.0.1      0.0.0.0         UG    0      0        0 eth0

Получаю данные о присвоенном Default Gateway

# eth0_gw=`/sbin/route -n | awk '/^0.0.0.0/ {print $2}'`
# echo $eth0_gw
10.111.0.1

Получаю данные о присвоенном нам сервере авторизации L2TP

# vpn_server=`/sbin/route -n | awk '/ppp0/ {print $1}'`
# echo $vpn_server
85.21.0.243



Возможно, что предварительно нужно прописать маршруты до билайновских dns и до l2pt сервера.
Последний раз когда настраивал, прокатило и без них.

route add -host 85.21.192.3 gw $eth0_gw
route add -host 213.234.192.8 gw $eth0_gw
route add -host 85.21.192.5 gw $eth0_gw


# route del default
# route add default dev ppp0
# route add -host $vpn_server gw $eth0_gw

Вот что получилось. (Поднят ppp интерфейс и по умолчанию пакеты отправляются ему).
При этом маршрут до L2TP сервера должен быть прописан. (Иначе, сервер не знает где ему авторизовываться, интерфейс ppp падает, все перестает работать).

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
85.21.0.243     10.111.0.1      255.255.255.255 UGH   0      0        0 eth0
85.21.0.243     0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
10.111.0.0      0.0.0.0         255.255.248.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 ppp0

Пинг пошел

# ping ya.ru
PING ya.ru (93.158.134.3) 56(84) bytes of data.
64 bytes from www.yandex.ru (93.158.134.3): icmp_seq=1 ttl=55 time=3.91 ms
64 bytes from www.yandex.ru (93.158.134.3): icmp_seq=2 ttl=55 time=4.00 ms



Остается только настроить NAT.


Моя задача потренироваться была выполнена.
Автоматизировать процесс изменения маршрутов в зависимости от того, поднят ли ppp интерфейс не пытался.
В списке “почитать” первая ссылка, там все это описывается.

Мое предположение, в билайне куча серверов авторизации.
Некоторые из них выдают маршруты, некоторые нет.

Если нужно добавить статические маршруты, можно это сделать в файле:

# vi /etc/sysconfig/network-scripts/route-eth0

10.0.0.0/8 via 10.111.0.1
62.205.179.146 via 10.111.0.1
85.21.79.0/24 via 10.111.0.1
85.21.90.0/24 via 10.111.0.1
85.21.52.198 via 10.111.0.1
85.21.52.254 via 10.111.0.1
85.21.138.3 via 10.111.0.1
83.102.146.96/27 via 10.111.0.1
83.102.237.231 via 10.111.0.1
195.14.50.1 via 10.111.0.1
195.14.50.3 via 10.111.0.1
195.14.50.16 via 10.111.0.1
195.14.50.26 via 10.111.0.1
85.21.192.3 via 10.111.0.1
213.234.192.8 via 10.111.0.1
85.21.192.5 via 10.111.0.1

Если кто напишет, как доделать, исправить, сделать лучше, чтобы было все по феншую, пишите я внесу исправления.

Если на клиенте не все сайты открываются, а на сервере все ок. (Например yandex и google открываются, а множество других нет, хотя и нормально пингуются). Проблемы скорее всего в настройкам MTU.

Следует создать правило в iptables

# iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu



Подробности здесь:
http://www.opennet.ru/base/net/pppoe_mtu.txt.html

Возможно, что здесь лучше описано решение точно такой же задачи:
http://linuxdata.ru/questions/q48.html

Резервная копия:
https://archive.today/jSvQG

Почитать:

http://ru.posix.wikia.com/wiki/PPTP#.D0.9F.D1.80.D0.BE.D1.81.D1.82.D0.BE_.D0.BE_.D1.81.D0.BB.D0.BE.D0.B6.D0.BD.D0.BE.D0.BC.VPN.D0.B4.D0.BB.D1.8F_.D0.BD.D0.B0.D1.87.D0.B8.D0.BD.D0.B0.D1.8E.D1.89.D0.B8.D1.85.

Резервная копия на всякий случай:
http://archive.is/0G2dc

http://homenet.beeline.ru/index.php?showtopic=58937
http://homenet.beeline.ru/index.php?showtopic=289658
http://homenet.beeline.ru/index.php?showtopic=58937
http://homenet.beeline.ru/index.php?showforum=629
http://archlinux.org.ru/forum/topic/7000/
http://www.linux.org.ru/forum/general/9315021
http://linuxoid.in/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%D0%BA_ISP_%22Corbina%22%28%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B0%29#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0.D1.80.D0.BE.D1.83.D1.82.D0.B8.D0.BD.D0.B3.D0.B0

Нужно посмотреть для Centos 7 (пока не смотрел)
http://homenet.beeline.ru/index.php?showtopic=320882