X

Обход блокировки Яндекса, ВК, ОК из Украины с помощью Mikrotik

Украинская блокировка сайтов

Украинская блокировка сайтов

!!! Статья находится в оформлении, если что-то не будет понятно пишите в комментарии !!!

Устанавливаем l2tp и ppp, так же ставим bind-utils

yum install epel-release
yum install ppp xl2tpd bind-utils

Немного теории взятой на форуме ubuntu

Жесть какая-то с этим статьями в интернете... У меня ощущение, что мало кто вообще понимает, как это все настраивается, поэтому пишут полную отсебятину, останавливаются на полпути, получая какую-то хрень (недоделанную, но работающую) и успокаиваются. Короче у меня получилось, но при чем тут ipsec я пока не понимаю.

Итак выводы пока следующие:
1. xl2tpd - первый демон с которым начинает взаимодействие подключающийся клиент. Задача этого демона - принять подключение на UDP порт 1701 и передать полученные данные дальше внутрь системы. В целом, больше ничего он делать не должен. Он может авторизовать входящие подключения по паролю/по имени хоста/IP адресу, но обычно это настраивают на следующих этапах, поэтому /etc/xl2tpd/l2tp-secrets должен оставаться пустым (паролей туда прописывать не нужно).
2. В /etc/xl2tpd/xl2tpd.conf есть блок с названием [lns], этот блок описывает конфигурацию сервера xl2tpd. Это как раз тот блок, который нам нужно настраивать. Подробности по настройке хорошо описаны в man xl2tpd.conf. Блок [lac] конфигурационного файла используется, если настраиваемый демон сам будет подключаться к другому серверу. Если вы хотите только принимать входящие подключения этот блок вообще не нужен.
3. Строка lac = 0.0.0.0-255.255.255.255 обязательна, если вы хотите принимать подключения с любых ip-адресов. Возможно в предыдущих версиях она была не нужна, поэтому об этом особо не пишут в манах, но сейчас ее нужно прописывать.
4. Строка "pppoptfile = /etc/ppp/options.l2tpd" в блоке [lns] говорит о том, с какими параметрами будет запущен следующий демон при входящем подключении - pppd. Именно ему передает все данные xl2tpd, если входящее подключение соответствует параметрам, указанным в конфиге.
5. На каждое входящее подключение, соответствующее требованиям, стартует своя копия pppd с параметрами из п. 4. Кстати, подробнее обо всех них читаем в man pppd. Все тоже очень подробно.
6. Учитываем, что старые маны в интернете иногда используют конструкции параметров типа:
-pap
+chap

Эти записи уже давно deprecated. Необходимо использовать refuse-pap, require-chap и т.д.

7. Именно на этапе настройки параметров pppd прописывается авторизация клиента. За нее отвечают инструкции:
auth
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2

Здесь мы запрещаем устаревшие протоколы и разрешаем mschap второй версии. Логин и пароль, которые мы указываем при подключении к VPN должны быть прописаны в /etc/pppd/chap-secrets. Именно по ним, и именно на этом этапе осуществляется авторизация клиента.

8. Уже на втором этапе можно настроить шифрование по майкрософтовской технологии MPPE. За него отвечает параметр require-mppe, а лучше даже require-mppe-128, тогда шифрование будет 128-битным.

9. Если правильно настроить эти 2 демона - вы получите полностью рабочий VPN через L2TP. У меня получилось. При чем тут IPSec и как при этом используется OpenSWAN я пока не пойму. Ощущение, что в большинстве интернетовских манов этот демон ставится как талисман и авторы сами не понимают, что делают. Так при работающем L2TP вы можете вообще вырубить IPSec (service ipsec stop) и все будет работать без проблем.

10. Есть понимание, что должен быть еще 3 этап, где налаживается взаимодействие между pppd и OpenSWAN. Как заставить pppd работать только через IPSec я пока не нашел, копаю дальше. Если все оставить как есть - L2TP будет работать, но траффик шифроваться либо вообще не будет, либо будет шифроваться простеньким майкрософтовским алгоритмом. Ну и нафиг такое счастье нужно?

11. Есть подозрение, что к применению IPSec относится параметр ipsec saref = yes в xl2tpd.conf, но связи пока не вижу.

 

Настраиваем /etc/xl2tpd/xl2tpd.conf

[global]
port = 1701 ;порт на котором работает туннель
listen-addr = 5.5.5.5 ;ip адрес интерфейса на сервере
[lns l2tpd] ;l2tpd — имя можно указать любое
lac = 0.0.0.0-255.255.255.255
ip range = 172.22.100.100-172.22.100.250 ;диапазон ip-алресов, выдаваемых сервером клиентам
local ip = 172.22.100.1 ;адрес сервера в туннеле биндится на интерфейс ppp

require chap = yes ;требование аутентификации ppp по протоколу chap
refuse pap = yes ;отказ в аутентификации ppp по протоколу pap

require authentication = yes ;требование к клиентам проходить обязательную аутентификацию
name = l2tpd ;имя
pppoptfile = /etc/ppp/options.xl2tpd ;файл содержащий описание опций ppp
length bit = yes ;использование бита длины, указывающего полезную нагрузку пакета

(!) Обратите внимание, что в качестве символа комментариев тут используется ";", когда я использовал "#" xl2tpd не мог распарсить конфиг и ругался на эти строчки

Настраиваем /etc/xl2tpd/l2tp-secrets

# Secrets for authenticating l2tp tunnels
# The l2tp-secrets file contains challenge-response authentication information for xl2tpd, the implementation of l2tp protocol.
# The format of the file is derived from the pap and chap secrets file format used in pppd. The secrets file is composed of zero or # more lines with 3 fields each. Each line represents an authentication secret.
# The 3 fields represent our hostname, the remote # hostname and the secret used in the authentication process.
# The first (us) field is for our hostname, a "*" may be used as a wildcard.
# The second (them) field is for the remote system's hostname. Again, a "*" may be used as a wildcard.
# The third (secret) field is the secret used if the previous two fields match the hostnames of the systems involved.
# The secret should, ideally, be at 16 characters long (the length of an MD5 digest output), and should probably be longer to
# ensure sufficient security. There is no minimum length requirement, however.

*       *       *   # let all , because we use auth with ppp, see more here: https://habrahabr.ru/company/FastVPS/blog/205162/

Настраиваем /etc/ppp/options.xl2tpd

ipcp-accept-local
ipcp-accept-remote
ms-dns  8.8.8.8
ms-dns  8.8.4.4
# ms-dns  192.168.1.1
# ms-dns  192.168.1.3
# ms-wins 192.168.1.2
# ms-wins 192.168.1.4
noccp
auth #запрос клиенту на аутентификацию до установления обмена сетевыми пакетами
#crtscts
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
#lock #создание lock файла для сохранения эксклюзивного доступа к устройству
lcp-echo-failure 10 # количество неудачных echo запросов до того как провести отключение клиента
lcp-echo-interval 60 #интервал echo запросов
proxyarp
connect-delay 5000
logfile /var/log/ppp/ppp.log #логировние

(?) Тут я закомментировал две опции которые были установлены по-умолчанию crtscts и lock, но при старте pppd, он ругался на них, мол ничего про них не знает

Теперь настраиваем логины/пароли в файле /etc/ppp/chap-secrets
(или /etc/ppp/pap-secrets если используете pap в настройках xl2tpd.conf)

# Secrets for authentication using CHAP
# clienе      server secret        IP addresses

"login" "l2tpd" "password" *

Все, теперь можно запустить демон командой:

xl2tpd -D

В ответ вы либо увидите ошибки (особенно полезно в случае проблем с конфигами и во вермя отладки), либо что-то типа:

[root@d5hz ppp]# xl2tpd -D
xl2tpd[27536]: Not looking for kernel SAref support.
xl2tpd[27536]: Using l2tp kernel support.
xl2tpd[27536]: xl2tpd version xl2tpd-1.3.8 started on d5hz.astbiz.com PID:27536
xl2tpd[27536]: Written by Mark Spencer, Copyright (C) 1998, Adtran, Inc.
xl2tpd[27536]: Forked by Scott Balmos and David Stipp, (C) 2001
xl2tpd[27536]: Inherited by Jeff McAdams, (C) 2002
xl2tpd[27536]: Forked again by Xelerance (www.xelerance.com) (C) 2006-2016
xl2tpd[27536]: Listening on IP address 5.5.5.5, port 1701

Если видите то, что выше, то значит все ок, xl2tpd слушает порт, если логи не интересуют можно стартовать демона так: service xl2tpd start (или service xl2tpd restart)

Теперь надо настроить l2p клиента

Для микротика (routeros), это делается тут: Interfaces > Add new > L2TP-Client

Вводите такие настройки

name: любое удобное имя, у меня l2tpd
Connect to: 5.5.5.5 (адрес сервера, в настройках xl2tpd.conf)
User: логин  (указанный в настройках chap-secrets)
Password: пароль  (указанный в настройках chap-secrets)
Allow: chap

Теперь сохраняетесь и включаете соединение (если оно было отключено ранее), смотрите Status, должно стать connected

На сервере в окне с запущенным (xl2tpd -D) должны увидить типа того (11.11.11.11 - ваш "домашний" ip):

xl2tpd[27536]: Connection established to 11.11.11.11, 1701.  Local: 25534, Remote: 168 (ref=0/0).  LNS session is 'l2tpd'
xl2tpd[27536]: Call established with 11.11.11.11, Local: 31950, Remote: 1, Serial: 88

Теперь можно посмотреть ifconfig на сервере, увидите что-то вроде

ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1410
        inet 172.22.100.1  netmask 255.255.255.255  destination 172.22.100.100
        ppp  txqueuelen 3  (Point-to-Point Protocol)
        RX packets 5  bytes 167 (167.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3  bytes 30 (30.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Тунель установился, все ок

Включаем форвардинг на сервере

echo "net.ipv4.ip_forward = 1"  >> /etc/sysctl.conf

и применяем изменения

# sysctl --system

Теперь включаем маскарадинг на сервере

# iptables -t nat -A POSTROUTING -o eth0 -s 172.22.100.0/24 -j MASQUERADE

# если есть ограничения файрвола

# iptables -A FORWARD -i eth0 -o ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -A FORWARD -i ppp0 -o eth0 -j ACCEPT

не забываем сохранить правила, для автозагрузки:

# service iptables save

если при сохранении правил получаете ошибку

The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.

то, нужно установить iptables-service:

# yum install iptables-services

и добавить в автозагрузку

# systemctl enable iptables.service

и уж затем, выполнить

# service iptables save

так же не забудьте добавить в автозагрузку xl2tpd

# systemctl enable xl2tpd

Теперь, желательно, перезагрузиться и убедиться, что все автозапустилось и правила файрвола на месте:

# reboot
# systemctl status xl2tpd.service
# iptables -L -t nat

 

Делаем маскарадинг на микротике

Перенаправляем трафик яндекса/вк/ок в тунель. Добавляем роуты на микротике

Профит!

 

Только что экспериментировал с разными способами, решил вообще не маркировать пакеты:
- добавил l2tp-client
- добавил маскарадинг l2tp
- для wan интерфейсов поставил distance 200+ чтоб роуты на них шли в последней очереди
- диапазоны вк прописал тупо в IP > Route где в качестве шлюза указал l2tp соединение
- вот и всё
в итоге нагрузки на проц нету, все открывается и летает

Диапазоны (обновлено 2017-09-19)

ВКонтакте
185.32.248.0/23
185.29.130.0/24
95.213.0.0/18
95.142.200.0/21
95.142.192.0/21
93.186.232.0/21
93.186.224.0/21
87.240.128.0/18

Яндекс
213.180.204.0/24
213.180.193.0/24
199.21.96.0/22
185.71.76.0/24
185.32.186.0/24
185.32.185.0/24
178.154.128.0/17
141.8.128.0/18
130.193.32.0/19
109.235.160.0/24
104.17.67.104
100.43.64.0/19
95.108.128.0/24
93.158.134.0/24
93.158.128.0/18
87.250.251.0/24
87.250.224.0/19
84.201.128.0/18
77.88.21.0/24
77.88.0.0/18
77.75.159.0/24
77.75.152.0/24
37.140.128.0/18
37.9.96.0/27
5.255.255.0/24
5.45.205.0/24
5.45.192.0/18

Мейл.ру
217.69.136.0/21
208.87.88.0/21
195.211.130.0/23
217.20.144.0/20
208.87.94.0/24
195.218.168.0/24
195.211.128.0/24
195.211.20.0/24
194.186.63.0/24
188.93.56.0/21
185.16.244.0/23
185.16.148.0/22
185.5.136.0/22
178.237.16.0/24
178.22.92.0/23
178.22.91.0/24
178.22.88.0/21
128.140.168.0/21
95.163.248.0/21
95.163.32.0/19
94.100.176.0/20
79.137.183.0/24
79.137.157.0/29
5.61.232.0/21
5.61.16.0/21

Kaspersky
77.74.176.0/22
77.74.181.0/24
77.74.183.0/24
93.159.228.0/22
185.54.220.0/23
185.85.12.0/24
185.85.14.0/23
77.74.176.0/21
91.103.64.0/21
93.159.224.0/21

Проверять тут: http://cqcounter.com/whois/

Полезные команды для статьи

  • ifconfig
  • ip route show
  • ip route list
  • ip route add 192.168.100.0/24 via 172.22.100.1
  • xl2tpd -D
  • # systemctl enable xl2tpd = Добавляем в автозагрузку в CentOS 7
    # systemctl start xl2tpd
    # systemctl status xl2tpd.service
    # journalctl –xn
    
  • iptables -L --line-numbers
  • iptables -D
  • iptables -L -t nat

Какой-то конфиг, всего скорее не рабочий, но тут есть описанием опций

# /etc/xl2tpd/xl2tpd.conf

[global]
auth file = /etc/xl2tpd/l2tp-secrets ; Where our challenge secrets are
debug tunnel = yes ; Enable debug
debug avp = yes ; Enable debug
debug network = yes ; Enable debug
debug packet = yes ; Enable debug

[lac l2tp-connection] ; VPN LAC definition
lns = xxx.xxx.xxx.xxx ; The IP address of our LAC
redial = yes ; Reconnect if disconnected
redial timeout = 15 ; Wait n seconds between redials
max redials = 5 ; Give up after n consecutive failures
hidden bit = yes ; User hidden AVP's?
length bit = no ; Use length bit in payload?
require chap = no ; Require CHAP auth. by peer
refuse chap = yes ; Refuse CHAP auth. by peer
require pap = yes ; Require PAP auth. by peer
refuse pap = no ; Require PAP authentication
refuse authentication = no ; Refuse authentication altogether
require authentication = yes ;Require peer to authenticate
name = User@isp ; VPN Username
ppp debug = yes ; Turn on PPP debugging
pppoptfile = /etc/ppp/options.l2tpd.client ; ppp options file for this lac

#/etc/xl2tpd/l2tp-secrets

# https://github.com/xelerance/xl2tpd/blob/master/doc/l2tp-secrets.5

# Secrets for authenticating l2tp tunnels
# The l2tp-secrets file contains challenge-response authentication information for xl2tpd, the implementation of l2tp protocol.
# The format of the file is derived from the pap and chap secrets file format used in pppd. The secrets file is composed of zero or # more lines with 3 fields each. Each line represents an authentication secret.
# The 3 fields represent our hostname, the remote # hostname and the secret used in the authentication process.
# The first (us) field is for our hostname, a "*" may be used as a wildcard.
# The second (them) field is for the remote system's hostname. Again, a "*" may be used as a wildcard.
# The third (secret) field is the secret used if the previous two fields match the hostnames of the systems involved.
# The secret should, ideally, be at 16 characters long (the length of an MD5 digest output), and should probably be longer to
# ensure sufficient security. There is no minimum length requirement, however.

# us them secret
* somename somesecret

#/etc/ppp/options.l2tpd.client
ipcp-accept-local # pppd will accept the peer's idea of our local IP address
mru 1410 # MRU is the maximum size for a received packet
mtu 1452 # MTU is the maximum size for a transmitted packet
debug # pppd will log contents of control packets - set up /etc/syslog.conf
refuse-eap # pppd will not agree to authenticate itself to the peer using EAP
refuse-chap # pppd will not agree to authenticate itself to the peer using CHAP
refuse-mschap # pppd will not agree to authenticate itself to the peer using MS-CHAP
refuse-mschap-v2 # pppd will not agree to authenticate itself to the peer using MS-CHAPv2
require-pap # Requires PAP [Password Authentication Protocol] authentication.
noccp #Disable compression control if the peer is buggy
show-password # When logging PAP packetspppd will log the password string as well
lcp-echo-failure 20 # pppd presumes peer to be dead if n LCP echo-request are not ack'd
lcp-echo-interval 50 # pppd will send an LCP echo-request frame every nseconds
asyncmap 0 # pppd will ask the peer not to escape any control characters
nocrtscts #No flow control using the RTS and CTS signals in RS-232
#crtscts # Use flow control using the RTS and CTS signals in RS-232
lock # pppd creates a UUCP-style lock file for exclusive access
local # Do not use modem control lines
#modem # Use the modem control lines
noauth # Do not require the peer to authenticate itself. Option is privileged
#auth # The peer does have to authenticate itself
noipx #Disable IPXCP and IPX Protocols only required if the peer is buggy
defaultroute # Make this the default route
nomppe-128 # Disable 128-bit encryption with MPPE

#/etc/ppp/pap-secrets
#user hostname secret
User@isp * mysecret

Источники

  • https://voxlink.ru/kb/voip-devices-configuration/nastrojka-L2TP-servera-na-CentOS/
  • http://forum.ubuntu.ru/index.php?PHPSESSID=59h4cdkbufhu7kvi4dq71qner3&topic=248324.msg1960589#msg1960589
  • Настраиваем VPN связь посредством l2tp + ipsec c использованием в качестве сервера OpenVZ контейнер: https://habrahabr.ru/company/FastVPS/blog/205162/
  • MikroTik. Правильный dst nat при использовании 2-х и более провайдеров: https://habrahabr.ru/post/313342/
  • Настройка Ipsec+L2tp: https://raymii.org/s/tutorials/IPSEC_L2TP_vpn_on_CentOS_-_Red_Hat_Enterprise_Linux_or_Scientific_-_Linux_6.html
  • https://wiki.mikrotik.com/wiki/Manual:Interface/L2TP
  • Конфиг с описанием опций https://ubuntuforums.org/archive/index.php/t-2179055.html
  • Примеры по iproute: http://linux-ip.net/html/tools-ip-route.html
  • Обход блокировки ВК: https://weblance.com.ua/317-obhod-blokirovki-saytov-so-storony-provaydera-na-mikrotik-routeros.html
  • iptables: https://ru.wikibooks.org/wiki/Iptables#.D0.A2.D0.B0.D0.B1.D0.BB.D0.B8.D1.86.D0.B0_mangle
  • http://blog.secaserver.com/2011/10/install-vpn-pptp-server-centos-6/
  • Рулим трафиком в Linux. Аккаунтинг, сбор статистики: https://habrahabr.ru/post/42581/
Категории: Бездна