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

Появилась потребность в организации VPN тунеля между локальным роутером MikroTik c RouterOS на борту и удаленным сервером на базе Ubuntu Linux. Причем сервер должен выглядеть для локальной сети местным, т.е. находится в этом же L2-сегменте. В качетве тунеля был выбран l2tp, практика показывает что он более стабилен, чем тот же pptp. Так как l2tp не обеспечивает шифрование данных поверх него был настроеен ipsec. В качестве сервера 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

5 комментариев “L2TP/IPSEC между роутером MikroTik и Ubuntu Linux”

Комментирование закрыто.