Skip to content

Mikrotik, IPSec, libreswan: как обойти блокировку RuTracker

Дело было вечером, делать было нечего (с)

Как-то раз, в очередной раз увидев заглушку провайдера о том, что доступ к рутрекеру запрещен отныне и навеки, я решил это дело исправить, как минимум в рамках одной отдельно взятой квартиры. Делать что-то с браузером или операционкой не хотелось совершенно, пользоваться сторонними VPN-сервисами не хотелось тем более. Ну а т.к. у меня уже есть VDS, то почему бы не воспользоваться ей? Так и родилась идея гонять трафик до рутрекера через VPN. Из всех вариантов самым годным, по ряду причин, был признан ipsec (или l2tp/ipsec) с авторизацией по PSK. Он не является самым простым с точки зрения реализации (по сравнению с OpenVPN), зато его поддержка есть во всех популярных устройствах (включая Windows, iOS, MacOS и Android) «из коробки».

Акт первый. IPSec для настоящих джедаев

Итак, в наличии имеем: VDS с Debain 8 и микротик со статическим белым адресом. Нужно организовать шифрованный канал между микротиком и сервером, дабы без проблем приобщаться к халяве прекрасному.

Начнем с Linux-сервера (я использовал Debian 8).

1. Ставим libreswan, xl2tpd (позже я расскажу, зачем)

1
apt-get install -y libreswan xl2tpd

2. Настраиваем. Для начала можно ограничиться настройками IPSec, а про xl2tpd поговорим чуть ниже.
Задаем IPSec PSK, с которым к нам будут стучаться клиенты

1
2
3
4
cat <<EOF >/etc/ipsec.secrets
%any: PSK "VeRy$3Cr#tp@s$w0rD"
EOF
chmod 600 /etc/ipsec.secrets

Теперь настраиваем все остальные параметры: настройки первой и второй фазы, а также acl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
cat <<EOF >/etc/ipsec.d/10-static-tunnel.conf
conn IPSEC-PSK-Mikrotik
        authby=secret
        pfs=no
        auto=add
        keyingtries=3
### Настройки первой и второй фаз. Шифрование и аутентификация
        phase2=esp
        phase2alg=aes256-sha1;modp2048
        ike=aes256-sha1;modp2048
        ikelifetime=8h
### left - это настройки serverside
### nexthop это наш default gw
        left=1.2.3.4
        leftsourceip=1.2.3.4
        leftnexthop=1.2.3.1
### Самое интересное - это подсеть (можно указать leftsubnets и список подсетей) которая находится "за" нашей VDS.
### Мы для клиента будем выступать шлюзом, через который он будет видеть рутрекер
        leftsubnet=195.82.146.214/32
### Это настройки клиентской стороны. Вместо IP-адреса можно указать %any, тогда src-ip проверяться не будет
        right=4.3.2.2
### Сеть, которая находится за нашим микротиком.
        rightsubnet=192.168.88.0/24
EOF

Ну и включаем наш кастомный конфиг.

1
2
3
cat <<EOF >>/etc/ipsec.conf
include /etc/ipsec.d/10-static-tunnel.conf
EOF

3. Стартуем ipsec-демон, проверяем:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#ipsec verify
Verifying installed system and configuration files

Version check and ipsec on-path                     [OK]
Libreswan 3.15 (netkey) on 3.16.0-4-amd64
Checking for IPsec support in kernel                [OK]
 NETKEY: Testing XFRM related proc values
         ICMP default/send_redirects                [OK]
         ICMP default/accept_redirects              [OK]
         XFRM larval drop                           [OK]
Pluto ipsec.conf syntax                             [OK]
Hardware random device                              [N/A]
Two or more interfaces found, checking IP forwarding    [OK]
Checking rp_filter                                  [OK]
Checking that pluto is running                      [OK]
 Pluto listening for IKE on udp 500                 [OK]
 Pluto listening for IKE/NAT-T on udp 4500          [OK]
 Pluto ipsec.secret syntax                          [OK]
Checking 'ip' command                               [OK]
Checking 'iptables' command                         [OK]
Checking 'prelink' command does not interfere with FIPSChecking for obsolete ipsec.conf options             [OK]
Opportunistic Encryption                            [DISABLED]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#ipsec status
000 using kernel interface: netkey
000 interface lo/lo ::1@500
000 interface lo/lo 127.0.0.1@4500
000 interface lo/lo 127.0.0.1@500
000 interface eth0/eth0 1.2.3.4@4500
000 interface eth0/eth0 1.2.3.4@500
000  
000  
000 fips mode=disabled;
000 SElinux=disabled
000  
000 config setup options:
000  
000 configdir=/etc, configfile=/etc/ipsec.conf, secrets=/etc/ipsec.secrets, ipsecdir=/etc/ipsec.d, dumpdir=/var/run/pluto/, statsbin=unset
000 sbindir=/usr/sbin, libexecdir=/usr/lib/ipsec
000 pluto_version=3.15, pluto_vendorid=OE-Libreswan-3.15
000 nhelpers=-1, uniqueids=yes, perpeerlog=no, shuntlifetime=900s, xfrmlifetime=300s
000 ddos-cookies-treshold=50000, ddos-max-halfopen=25000, ddos-mode=auto
000 ikeport=500, strictcrlpolicy=no, crlcheckinterval=0, listen=<any>, nflog-all=0
000 secctx-attr-type=<unsupported>
000 myid = (none)
000 debug none
000  
000 nat-traversal=yes, keep-alive=20, nat-ikeport=4500
000 virtual-private (%priv):
000 - allowed subnets: 10.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 25.0.0.0/8, 100.64.0.0/10, fd00::/8, fe80::/10
000  
000 ESP algorithms supported:
000  
000 algorithm ESP encrypt: id=3, name=ESP_3DES, ivlen=8, keysizemin=192, keysizemax=192
000 algorithm ESP encrypt: id=6, name=ESP_CAST, ivlen=8, keysizemin=128, keysizemax=128
000 algorithm ESP encrypt: id=11, name=ESP_NULL, ivlen=0, keysizemin=0, keysizemax=0
000 algorithm ESP encrypt: id=12, name=ESP_AES, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=13, name=ESP_AES_CTR, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=14, name=ESP_AES_CCM_A, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=15, name=ESP_AES_CCM_B, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=16, name=ESP_AES_CCM_C, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=18, name=ESP_AES_GCM_A, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=19, name=ESP_AES_GCM_B, ivlen=12, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=20, name=ESP_AES_GCM_C, ivlen=16, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=22, name=ESP_CAMELLIA, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=252, name=ESP_SERPENT, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=253, name=ESP_TWOFISH, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm AH/ESP auth: id=1, name=AUTH_ALGORITHM_HMAC_MD5, keysizemin=128, keysizemax=128
000 algorithm AH/ESP auth: id=2, name=AUTH_ALGORITHM_HMAC_SHA1, keysizemin=160, keysizemax=160
000 algorithm AH/ESP auth: id=5, name=AUTH_ALGORITHM_HMAC_SHA2_256, keysizemin=256, keysizemax=256
000 algorithm AH/ESP auth: id=6, name=AUTH_ALGORITHM_HMAC_SHA2_384, keysizemin=384, keysizemax=384
000 algorithm AH/ESP auth: id=7, name=AUTH_ALGORITHM_HMAC_SHA2_512, keysizemin=512, keysizemax=512
000 algorithm AH/ESP auth: id=8, name=AUTH_ALGORITHM_HMAC_RIPEMD, keysizemin=160, keysizemax=160
000 algorithm AH/ESP auth: id=9, name=AUTH_ALGORITHM_AES_XCBC, keysizemin=128, keysizemax=128
000 algorithm AH/ESP auth: id=251, name=AUTH_ALGORITHM_NULL_KAME, keysizemin=0, keysizemax=0
000  
000 IKE algorithms supported:
000  
000 algorithm IKE encrypt: v1id=0, v1name=0??, v2id=16, v2name=AES_CCM_C, blocksize=16, keydeflen=128
000 algorithm IKE encrypt: v1id=0, v1name=0??, v2id=15, v2name=AES_CCM_B, blocksize=16, keydeflen=128
000 algorithm IKE encrypt: v1id=0, v1name=0??, v2id=14, v2name=AES_CCM_A, blocksize=16, keydeflen=128
000 algorithm IKE encrypt: v1id=5, v1name=OAKLEY_3DES_CBC, v2id=3, v2name=3DES, blocksize=8, keydeflen=192
000 algorithm IKE encrypt: v1id=24, v1name=OAKLEY_CAMELLIA_CTR, v2id=24, v2name=CAMELLIA_CTR, blocksize=16, keydeflen=128
000 algorithm IKE encrypt: v1id=8, v1name=OAKLEY_CAMELLIA_CBC, v2id=23, v2name=CAMELLIA_CBC, blocksize=16, keydeflen=128
000 algorithm IKE encrypt: v1id=20, v1name=OAKLEY_AES_GCM_C, v2id=20, v2name=AES_GCM_C, blocksize=16, keydeflen=128
000 algorithm IKE encrypt: v1id=19, v1name=OAKLEY_AES_GCM_B, v2id=19, v2name=AES_GCM_B, blocksize=16, keydeflen=128
000 algorithm IKE encrypt: v1id=18, v1name=OAKLEY_AES_GCM_A, v2id=18, v2name=AES_GCM_A, blocksize=16, keydeflen=128
000 algorithm IKE encrypt: v1id=13, v1name=OAKLEY_AES_CTR, v2id=13, v2name=AES_CTR, blocksize=16, keydeflen=128
000 algorithm IKE encrypt: v1id=7, v1name=OAKLEY_AES_CBC, v2id=12, v2name=AES_CBC, blocksize=16, keydeflen=128
000 algorithm IKE encrypt: v1id=65004, v1name=OAKLEY_SERPENT_CBC, v2id=65004, v2name=SERPENT_CBC, blocksize=16, keydeflen=128
000 algorithm IKE encrypt: v1id=65005, v1name=OAKLEY_TWOFISH_CBC, v2id=65005, v2name=TWOFISH_CBC, blocksize=16, keydeflen=128
000 algorithm IKE encrypt: v1id=65289, v1name=OAKLEY_TWOFISH_CBC_SSH, v2id=65289, v2name=TWOFISH_CBC_SSH, blocksize=16, keydeflen=128
000 algorithm IKE hash: id=1, name=OAKLEY_MD5, hashlen=16
000 algorithm IKE hash: id=2, name=OAKLEY_SHA1, hashlen=20
000 algorithm IKE hash: id=4, name=OAKLEY_SHA2_256, hashlen=32
000 algorithm IKE hash: id=5, name=OAKLEY_SHA2_384, hashlen=48
000 algorithm IKE hash: id=6, name=OAKLEY_SHA2_512, hashlen=64
000 algorithm IKE hash: id=9, name=DISABLED-OAKLEY_AES_XCBC, hashlen=16
000 algorithm IKE dh group: id=2, name=OAKLEY_GROUP_MODP1024, bits=1024
000 algorithm IKE dh group: id=5, name=OAKLEY_GROUP_MODP1536, bits=1536
000 algorithm IKE dh group: id=14, name=OAKLEY_GROUP_MODP2048, bits=2048
000 algorithm IKE dh group: id=15, name=OAKLEY_GROUP_MODP3072, bits=3072
000 algorithm IKE dh group: id=16, name=OAKLEY_GROUP_MODP4096, bits=4096
000 algorithm IKE dh group: id=17, name=OAKLEY_GROUP_MODP6144, bits=6144
000 algorithm IKE dh group: id=18, name=OAKLEY_GROUP_MODP8192, bits=8192
000 algorithm IKE dh group: id=22, name=OAKLEY_GROUP_DH22, bits=1024
000 algorithm IKE dh group: id=23, name=OAKLEY_GROUP_DH23, bits=2048
000 algorithm IKE dh group: id=24, name=OAKLEY_GROUP_DH24, bits=2048
000  
000 stats db_ops: {curr_cnt, total_cnt, maxsz} :context={0,0,0} trans={0,0,0} attrs={0,0,0}
000  
000 Connection list:
000  
000 "IPSEC-PSK-Mikrotik": 195.82.146.214/32===1.2.3.4<1.2.3.4>---1.2.3.1...4.3.2.2<4.3.2.2>===192.168.88.0/24; erouted; eroute owner: #14
000 "IPSEC-PSK-Mikrotik":     oriented; my_ip=1.2.3.4; their_ip=unset
000 "IPSEC-PSK-Mikrotik":   xauth info: us:none, them:none,  my_xauthuser=[any]; their_xauthuser=[any]
000 "IPSEC-PSK-Mikrotik":   modecfg info: us:none, them:none, modecfg policy:push, dns1:unset, dns2:unset, domain:unset, banner:unset;
000 "IPSEC-PSK-Mikrotik":   labeled_ipsec:no;
000 "IPSEC-PSK-Mikrotik":   policy_label:unset;
000 "IPSEC-PSK-Mikrotik":   ike_life: 28800s; ipsec_life: 28800s; rekey_margin: 540s; rekey_fuzz: 100%; keyingtries: 3;
000 "IPSEC-PSK-Mikrotik":   retransmit-interval: 500ms; retransmit-timeout: 60s;
000 "IPSEC-PSK-Mikrotik":   sha2_truncbug:no; initial_contact:no; cisco_unity:no; send_vendorid:no;
000 "IPSEC-PSK-Mikrotik":   policy: PSK+ENCRYPT+TUNNEL+IKEV1_ALLOW+IKEV2_ALLOW+SAREF_TRACK+IKE_FRAG_ALLOW;
000 "IPSEC-PSK-Mikrotik":   conn_prio: 32,24; interface: eth0; metric: 0; mtu: unset; sa_prio:auto; nflog-group: unset;
000 "IPSEC-PSK-Mikrotik":   newest ISAKMP SA: #13; newest IPsec SA: #14;
000 "IPSEC-PSK-Mikrotik":   IKE algorithms wanted: AES_CBC(7)_256-SHA1(2)_000-MODP2048(14)
000 "IPSEC-PSK-Mikrotik":   IKE algorithms found:  AES_CBC(7)_256-SHA1(2)_160-MODP2048(14)
000 "IPSEC-PSK-Mikrotik":   IKE algorithm newest: AES_CBC_256-SHA1-MODP2048
000 "IPSEC-PSK-Mikrotik":   ESP algorithms wanted: AES(12)_256-SHA1(2)_000; pfsgroup=MODP2048(14)
000 "IPSEC-PSK-Mikrotik":   ESP algorithms loaded: AES(12)_256-SHA1(2)_000
000 "IPSEC-PSK-Mikrotik":   ESP algorithm newest: AES_256-HMAC_SHA1; pfsgroup=<N/A>

4. Настраиваем iptables: nat/mangle

sysctl:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cat <<EOF >>/etc/sysctl.conf
net.ipv4.ip_forward=1

net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0

net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0

net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.eth0.rp_filter=0
net.ipv4.conf.lo.rp_filter=0
EOF

sysctl -p

iptables:

1
2
3
4
5
6
7
8
#Тут все просто - настраиваем NAT для нашей локалки
#Правила FILTER добавьте по вкусу
iptables -t nat -A POSTROUTING -s 192.168.88.0/24 -j SNAT --to-source 1.2.3.4
#Т.к. у нас туннель, то MTU необходимо скорректировать, иначе нормально работать не будет
iptables -t mangle -I FORWARD -p tcp -m policy --pol ipsec --dir in --syn -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
iptables -t mangle -I FORWARD -p tcp -m policy --pol ipsec --dir out --syn -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
ip6tables -t mangle -I FORWARD -p tcp -m policy --pol ipsec --dir in --syn -m tcpmss --mss 1341:1536 -j TCPMSS --set-mss 1340
ip6tables -t mangle -I FORWARD -p tcp -m policy --pol ipsec --dir out --syn -m tcpmss --mss 1341:1536 -j TCPMSS --set-mss 1340

5. Настраиваем Mikrotik. Тут все довольно стандартно.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/ip ipsec proposal
set [ find default=yes ] enc-algorithms=3des
add enc-algorithms=aes-256-cbc lifetime=8h name=nixman pfs-group=modp2048
/ip ipsec peer
add address=1.2.3.4/32 dh-group=modp2048 dpd-interval=disable-dpd dpd-maximum-failures=1 enc-algorithm="" generate-policy=port-override lifetime=8h secret=VeRy$3Cr#tp@s$w0rD
/ip ipsec policy
set 0 disabled=yes
add dst-address=195.82.146.214/32 level=unique proposal=nixman sa-dst-address=1.2.3.4 sa-src-address=4.3.2.2 src-address=192.168.88.0/24 tunnel=yes

#Разумеется, это правило дожно быть выше запрещающего входящие пакеты на интерфейс микротика ;)
/ip firewall filter
add chain=input port=500,4500 protocol=udp src-address=1.2.3.4

#Важный момент, который, в т.ч. описан в wiki. Тут мы принудительно запрещаем NAT'ить трафик, который идет в сторону рутрекера, иначе в IPSec он не попадет.
/ip firewall nat
add chain=srcnat dst-address=195.82.146.214 src-address=192.168.88.0/24

Проверяем, что связность установилась (напомню, что она установится не сразу, а как только в туннель попадут пакеты):

1
2
3
4
5
6
7
[admin@snake-mikrotik] > /ip ip installed-sa print
Flags: A - AH, E - ESP
 0 E spi=0x66F94AD src-address=1.2.3.4 dst-address=4.3.2.2 state=mature auth-algorithm=sha1 enc-algorithm=aes-cbc auth-key="b52e248768d1a031186299669f6f2abcf6ebd0fb"
     enc-key="d8b98cf70a6cc3136b6cb9cb552499d8762b7665f843ae401ace78ec4f63b6d3" add-lifetime=6h24m/8h replay=128

 1 E spi=0x82EB38E3 src-address=4.3.2.2 dst-address=1.2.3.4 state=mature auth-algorithm=sha1 enc-algorithm=aes-cbc auth-key="191862a81783fbe709e493ffed24336c2667ee47"
     enc-key="b7c9496a429f1001faec428d760ced3b679b3975f57162fc44f2982b0c29227c" add-lifetime=6h24m/8h replay=128

При успешном подключении на сервере можно будет увидеть что-то вроде этого:

1
2
3
4
5
6
7
8
9
000 Total IPsec connections: loaded 3, active 1
000  
000 State Information: DDoS cookies not required, Accepting new IKE connections
000 IKE SAs: total(1), half-open(0), open(0), authenticated(1), anonymous(0)
000 IPsec SAs: total(1), authenticated(1), anonymous(0)
000  
000 #136: "IPSEC-PSK-Mikrotik":500 STATE_QUICK_I2 (sent QI2, IPsec SA established); EVENT_SA_REPLACE in 290s; newest IPSEC; eroute owner; isakmp#118; idle; import:not set
000 #136: "IPSEC-PSK-Mikrotik" esp.7995052@4.3.2.2 esp.78503099@1.2.3.4 tun.0@4.3.2.2 tun.0@1.2.3.4 ref=0 refhim=4294901761 Traffic: ESPin=0B ESPout=0B! ESPmax=4194303B
000 #137: "IPSEC-PSK-Mikrotik":500 STATE_MAIN_I4 (ISAKMP SA established); EVENT_SA_REPLACE in 6690s; newest ISAKMP; lastdpd=-1s(seq in:0 out:0); idle; import:not set

На этом, собственно, все =) Проверяем — рутрекер открывается, торренты качаются. Лепота?
Про организацию IPSec с Juniper и Cisco я уже рассказывал. Так что если у вас не VPS с линуксом, а Juniper или Cisco — посмотрите, возможно, будет полезно.


Акт второй. RoadWarriors и L2TP/IPSec

Описанный выше способ хорош для офиса или дома, где есть интернет-канал с фиксированным внешним IP-адресом. Но кроме домашнего микротика, у меня есть еще телефон и ноутбук. И с тем и с другим я частенько бываю вне дома, и там уже просыпается паранойя — кто знает, слушается ли трафик в публичных WiFi или нет?. Как быть? Правильно, настроить VPN на основе L2TP или OpenVPN. OpenVPN подходит средне — он требует установки клиента, плюс файл с настройками и сертификатом (зато везде пролезает что плюс). Поэтому мы пойдем другим путем — настроим L2TP/IPsec с авторизацией по логину/паролю. Благо, встроенный клиент есть в каждой уважающей себя операционке.

Настраиваем сервер (все тот же linux debian, хотя может быть и Mikrotik, конечно же).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
cat <<EOF >/etc/ipsec.d/20-l2tp-psk.conf
conn L2TP-PSK-NAT
        rightsubnet=vhost:%priv
        also=L2TP-PSK-noNAT

conn L2TP-PSK-noNAT
        # Авторизация по PSK, pfs выключаем
        authby=secret
        pfs=no
        auto=add
        keyingtries=3
        # Обновление ключей происходит по инициативе клиента
        rekey=no
        # DPD - это что-то вроде heartbeat, показывает, что наш клиент жив. А если отвалился - мы аккуратно закроем соединение
        # чтобы клиент мог подключиться снова
        dpddelay=10
        dpdtimeout=90
        dpdaction=clear
        # Выставляем lifetime для sa
        ikelifetime=8h
        keylife=1h
        # т.к. мы используем l2tp, то ipsec пользуем не в туннельном, а в транспортном режиме
        type=transport
        #
        # Тут мы не заморачиваемся определенным интерфейсом, а подставляем его автоматически
        left=%defaultroute
        #
        # 17 - это UDP, 1701 - порт, используемый L2TP. Т.е. мы шифруем исходящий к клиенту трафик только для l2tp
        # Если подключиться не получилось, попробуйте leftprotoport=17/%any
        leftprotoport=17/1701
        #
        # Настройки удаленной стороны
        #
        right=%any
        # А вот от клиента считаем шифрованным весь пришедший трафик, независимо от source port
        rightprotoport=17/%any
EOF

Подключаем конфиг:

1
2
3
cat <<EOF >>/etc/ipsec.conf
include /etc/ipsec.d/20-l2tp-psk.conf
EOF

Правим конфиг xl2tpd/ppp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
cat <<EOF >/etc/xl2tpd/xl2tpd.conf
[global]
ipsec saref = yes
access control = no

[lns default]
ip range = 10.0.1.2-10.0.1.255
local ip = 10.0.1.1
refuse chap = yes
refuse pap = yes
require authentication = yes
pppoptfile = /etc/ppp/xl2tpd-options
length bit = yes
EOF

Указывем шифрованную аутентификацию по MSCHAPv2 и прописываем клиенту гугловые DNS

1
2
3
4
5
6
cp /etc/ppp/options /etc/ppp/xl2tpd-options
cat <<EOF >>/etc/ppp/xl2tpd-options
require-mschap-v2
ms-dns 8.8.8.8
ms-dns 8.8.4.4
EOF

Тут мы указываем параметры аутентификации l2tp, по одному юзеру на строку

1
2
3
4
cat <<EOF >/etc/ppp/chap-secrets
mikrotik * An0tH3Rp@$sw0rD *
EOF
chmod 600 /etc/ppp/chap-secrets

С серверной частью всё. Осталось включить сервис и запустить:

1
2
systemctl enable xl2tpd.service
systemctl start xl2tpd.service

И не забыть добавить в фаервол нужные правила:

1
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -j SNAT --to-source 1.2.3.4

Как настроить l2tp/ipsec клиент на Linux, можно посмотреть вот тут, на любой другой платформе это будет еще проще.

На Mikrotik это и вовсе делается буквально одной командой (ну или двумя — на случай, если вы захотите заворачивать в туннель не весь трафик, а только вожделенный рутрекер):

1
2
/interface l2tp-client
add allow=mschap1,mschap2 connect-to=1.2.3.4 disabled=no ipsec-secret=VeRy$3Cr#tp@s$w0rD mrru=1600 name=l2tp-out1 password=An0tH3Rp@$sw0rD use-ipsec=yes user=mikrotik add-default-route=yes

При этом все нужные ipsec-policy создаются динамически.

После этого любимый трекер будет доступен из любого места, где есть интернет (и открыт l2tp :)).

12 комментариев

  1. Павел Павел

    Уважаемый автор, а вам не боязно за «законопроект о запрете пропаганды обхода блокировок»?
    Конечно они от него отмахнулись, но боюсь по факту просто сделают слова более витиеватые.

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

    Ну, и мой пост пожалуй, тоже стоит удалить о_0

    • Спасибо за тревогу 🙂 при необходимости поменяю, конечно.

  2. Напомним, что 9 ноября Мосгорсуд принял решение об удовлетворении иска издательства «Эксмо» и пожизненной блокировке крупнейшего торрент-теркера RuTracker.org. Если решение не будет оспорено, то через 30 дней с этого момента к сайту будет прекращен доступ с территории России.

    • А сказать-то вы что хотели, уважаемый?

  3. rrr rrr

    привет, спасибо за инструкцию. А если хочется весь трафик определённых клиентов внутри сети пустить через шлюз, что нужно прописать? И если интернет на микротик через pppoe приходит?

    • Если хочется пустить весь трафик, то вместо ip-адреса назначения в настройках ipsec и NAT микротика указываете 0.0.0.0/0 (и leftsubnet в настройках libreswan тоже, соответственно).

  4. Алексей Алексей

    >> Делать что-то с браузером или операционкой не хотелось совершенно…

    А зря. Установив плагин freegate за 2 минуты и 3 клика, можно было бы не стрелять из пушки по воробьям. Понятно, что глубинный смысл этой статьи в демонстрации на практике l2tp/ipsec-сервера на linux и спаривания его с RouterOS, что может быть полезно в самых разных ситуациях, но применять всё это для достижения обозначенной цели… Ну это только если совсем из любви к искусству, когда вечером вообще нечем заняться.

    • С одной стороны, я с вами согласен.
      С другой — у меня уже есть дома микротик (и виртуалка для различных нужд), есть дома несколько устройств (в т.ч. жены, которая не технарь ни разу). И, что самое главное, я полностью контролирую всю цепочку.

  5. Виктор Виктор

    Здравствуйте, Уважаемый Админ.
    У меня 2 вопроса. Первый:
    Какие модели Mikrotik используете и насколько нагружается процессор при использовании ipsec?

    Второй.
    Вы в пункте 5 пишете:

    #Важный момент, который, в т.ч. описан в wiki. Тут мы принудительно запрещаем NAT’ить трафик, который идет в сторону рутрекера, иначе в IPSec он не попадет.
    /ip firewall nat
    add chain=srcnat dst-address=195.82.146.214 src-address=192.168.88.0/24

    Если я правильно понял, то получается такая цепочка домашняя локалка > nat> l2tp туннель(+ipsec)>nat(На сервере)> Внешний инет ?
    Можно объяснить чуть подробнее?

    • Модели — RB950 series либо RB2011. Аппаратной поддержки шифрования нет, так что скорость соответствующая. Есть RB850 или RB1100AHx2, например, у них есть аппаратные AES-чипы, там всё сильно лучше.

      нет, т.к. мы в правиле не указали action, то по умолчанию оно выставляется в allow, т.е. трансляции не происходит и пакет идёт в ipsec-туннель с «реальным» src-ip нашей локалки.

  6. nodmis nodmis

    Алексей, подскажите
    если я хочу весь трафик в интернет пускать через ipsec, то как как должна выглядеть строка конфигурации Policy на стороне микротика?

    /ip ipsec policy
    set 0 disabled=yes
    add dst-address=0.0.0.0/0 level=unique proposal=nixman sa-dst-address=[vps-ip] sa-src-address=[мой внешний ip] src-address=192.168.88.0/24 tunnel=yes

    [мой внешний ip] я могу узнать только на сайтах вроде https://whoer.net/ , https://www.whatismyip.com/ т.к. сам микротик его не знает.

    • В вашем случае лучше всего использовать схему Road-warriors, т.е. с l2tp-клиент\сервером.
      Микротик умеет работать с NAT-T + dynamic ip (с костылями, понятно), но это тянет на отдельную статью

Добавить комментарий

%d такие блоггеры, как: