L2TP/IPSEC между роутером MikroTik и Ubuntu Linux

Появилась потребность в организации тунеля между локальным роутером c RouterOS на борту и удаленным сервером на базе Ubuntu . Причем сервер должен выглядеть для локальной сети местным, т.е. находится в этом же L2-сегменте. В качетве тунеля был выбран , практика показывает что он более стабилен, чем тот же pptp. Так как не обеспечивает шифрование данных поверх него был настроеен . В качестве сервера l2tp выступает RouterOS. Конфигурация узлов следуюущая:

Узел Внешний адрес Локальный адрес
MikroTik 192.168.0.1 10.0.0.1/24
Linux 192.168.1.100 10.0.0.100

1. L2TP сервер на стороне MikroTik

Создаем пользоваьеля для VPN.

 /ppp secret add name=l2tp-user1 service=l2tp password=s3cr3t \ local-address=10.0.0.1 remote-address=10.0.0.100 

Включаем L2TP-сервер.

 /interface l2tp-server server set enabled=yes /interface l2tp-server server print enabled: yes max-mtu: 1460 max-mru: 1460 mrru: disabled authentication: chap,mschap1,mschap2 keepalive-timeout: 30 default-profile: default-encryption 

Для того чтобы присутсвие удаленного сервера в локальной сети работало необходимо Proxy ARP на локальном интерфесе.

 /interface ethernet set ether2 arp=proxy-arp 

2. L2TP клиент Ubuntu Linux

Устананвливаем xl2tpd, это сервер и клиент для протокола l2tp.

 apt-get install xl2tpd 

Приводим конфигурационный файл /etc/xl2tpd/xl2tpd.conf к следующему виду

[global] access control = yes port = 1701 rand source = dev [lac MikroTik] lns = 192.168.0.1 redial = yes redial timeout = 3 require chap = yes require authentication = no name = l2tp-user1 ppp debug = yes pppoptfile = /etc/ppp/options.MikroTik require pap = no autodial = yes 

Создаем /etc/ppp/options.MikroTik

 unit 0 remotename l2tp ipparam MikroTik connect /bin/true mru 1460 mtu 1460 nodeflate nobsdcomp persist maxfail 0 nopcomp noaccomp noauth nodefaultroute name l2tp-user1 

Добавляем учетные данные пользователя в /etc/ppp/chap-secrets

 l2tp-user1 l2tp s3cr3t 

Перезапускаем сервис.

 service xl2tpd restart 

Тунель долежен подняться и работать. Однако, данные передаются через интернет инкапсулированными без шифрования, в большинстве случаем это не приемлемо. Поэтому продолжаем и настраиваем ipsec поверх l2tp-тунеля.

3. MikroTik IPSEC

Кинфигурация узла.

 /ip ipsec peer add address=192.168.1.100/32 port=500 \ auth-method=pre-shared-key secret="topsecret" \ generate-policy=no exchange-mode=main send-initial-contact=no nat-traversal=no \ proposal-check=obey hash-algorithm=md5 enc-algorithm=3des dh-group=modp1024 lifetime=1d 

Политики шифрования трафика.

 /ip ipsec policy add src-address=192.168.1.100/32 src-port=1701 \ dst-address=192.168.0.1/32 dst-port=1701 \ sa-src-address=192.168.1.100 sa-dst-address=192.168.0.1 \ tunnel=no action=encrypt proposal=default /ip ipsec policy add src-address=192.168.0.1/32 src-port=1701 \ dst-address=192.168.1.100/32 dst-port=1701 \ sa-src-address=192.168.0.1 sa-dst-address=192.168.1.100 \ tunnel=no action=encrypt proposal=default 

4. Ubuntu IPSEC

В Linux нам потребуется два пакета, собственно ipsec-tools и racoon, поскольку мы используем pre-shared key для идентификация.

 apt-get install ipsec-tools racoon 

Заносим реквизиты в /etc/racoon/psk.txt

 192.168.0.1 topsecret 

Приводим /etc/racoon/racoon.conf к следующему виду

log notify; path pre_shared_key "/etc/racoon/psk.txt"; remote 192.168.0.1 { exchange_mode main; lifetime time 24 hour; proposal { encryption_algorithm 3des; hash_algorithm md5; authentication_method pre_shared_key; dh_group modp1024; } generate_policy off; } sainfo anonymous { pfs_group modp1024; encryption_algorithm 3des; authentication_algorithm hmac_sha1, hmac_md5; compression_algorithm deflate; } 

Настраиваем политики шифрования трафика /etc/ipsec-tools.conf

 !/usr/sbin/setkey -f flush; spdflush; spdadd 192.168.1.100[1701] 192.168.0.1[1701] any -P out ipsec esp/transport//require; spdadd 192.168.0.1[1701] 192.168.1.100[1701] any -P in ipsec esp/transport//require; 

Перезапускаем сервисы.

 service setkey restart service racoon restart service xl2tpd restart 

Если все сделано правильно, то можно увидеть следующее:

 ifconfig ppp0 ppp0 Link encap:Point-to-Point Protocol inet addr:10.0.0.100 P-t-P:10.0.0.1 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1460 Metric:1 RX packets:87 errors:0 dropped:0 overruns:0 frame:0 TX packets:95 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:10167 (10.1 KB) TX bytes:6472 (6.4 KB) racoonctl show-sa esp 192.168.1.100 192.168.0.1 esp mode=transport spi=237896903(0x0e2e04c7) reqid=0(0x00000000) E: 3des-cbc c46af899 be45953c 90096761 701e1160 06dc1b82 dfd79c2f A: hmac-sha1 79bf3cdc d00636fe 89fff227 0677c5a5 aa8a8e22 seq=0x00000000 replay=4 flags=0x20000000 state=mature created: Feb 9 15:41:48 2013 current: Feb 9 15:47:37 2013 diff: 349(s) hard: 28800(s) soft: 23040(s) last: Feb 9 15:41:49 2013 hard: 0(s) soft: 0(s) current: 13086(bytes) hard: 0(bytes) soft: 0(bytes) allocated: 174 hard: 0 soft: 0 sadb_seq=3 pid=8374 refcnt=0 192.168.0.1 192.168.1.100 esp mode=transport spi=140925062(0x08665886) reqid=0(0x00000000) E: 3des-cbc d98325cf da2b362e e4490eb6 462fd74a a4740169 4ce450b4 A: hmac-sha1 cccf10e4 bc6ad65e 9e5c6e64 17fa9572 d090ed6c seq=0x00000000 replay=4 flags=0x20000000 state=mature created: Feb 9 15:41:48 2013 current: Feb 9 15:47:37 2013 diff: 349(s) hard: 28800(s) soft: 23040(s) last: Feb 9 15:41:49 2013 hard: 0(s) soft: 0(s) current: 17785(bytes) hard: 0(bytes) soft: 0(bytes) allocated: 158 hard: 0 soft: 0 sadb_seq=0 pid=8374 refcnt=0