IPSec: L2TP для Windows
22.05.2017

IPSec Xauth PSK всем хорош, только не поддерживается нативно в ОС Windows (7/8/10). Так что, чтобы закрыть тему, давайте рассмотрим IPSec L2TP.

L2TP - это туннелирование трафика на втором уровне сетевого стека. Для серверной части нам предстоит сгенерировать сертификаты, настроить racoon и xl2tpd. Разом установим все нужные пакеты:

# apt-get install racoon ipsec-tools xl2tpd

Генерация сертификатов

Мы воспользуемся пакетом EasyRSA:

# wget 'https://github.com/OpenVPN/easy-rsa/releases/download/2.2.2/EasyRSA-2.2.2.tgz'
# tar xvf EasyRSA-2.2.2.tgz 
# cd EasyRSA-2.2.2/

Все настройки нужно обозначить в файле vars:

# nano -w vars
export KEY_SIZE=1024
export KEY_EXPIRE=365
export KEY_COUNTRY="RU"
export KEY_PROVINCE="MSK"
export KEY_CITY="Moscow"
export KEY_ORG="Home"
export KEY_EMAIL="admin@test.com"

Для production размер ключа (KEY_SIZE) следует установить 4096.

# . ./vars
# . ./build-ca
# . ./build-key-server server
# . ./build-dh
# . ./build-key-pkcs12 client

При выполнении команд в большинстве случаев придется нажимать Enter. Мы также сгенерировали нужные клиентские ключи.

racoon

Все готовые сертификаты скопируем в иерархию racoon:

# cp /root/EasyRSA-2.2.2/keys/ca.* /etc/racoon/certs/
# cp /root/EasyRSA-2.2.2/keys/server.* /etc/racoon/certs/
# cp /root/EasyRSA-2.2.2/keys/dh1024.pem /etc/racoon/certs/

Конфигурационный файл (/etc/racoon/racoon.conf):

path include "/etc/racoon";
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";
path script "/etc/racoon/scripts";
listen {
    isakmp 1.2.3.4 [500];
    isakmp_natt 1.2.3.4 [4500];
    strict_address;
}
remote anonymous {
    exchange_mode main;
    doi ipsec_doi;
    lifetime time 24 hour;
    passive on;
    generate_policy on;
    proposal_check obey;
    nat_traversal on;
    ike_frag on;
    # Проверять идентификаторы сертификата (ASN), для production "on"
    verify_identifier off;
    my_identifier asn1dn;
    peers_identifier asn1dn;
    # DPD - dead peer detection. Обнаружение мертвых соседей.
    dpd_delay 10;
    dpd_retry 5;
    dpd_maxfail 5;
    send_cr on;
    verify_cert on;
    send_cert on;
    certificate_type x509 "server.crt" "server.key";
    ca_type x509 "ca.crt";
    proposal {
        encryption_algorithm 3des;
        hash_algorithm sha1;
        authentication_method rsasig;
        dh_group modp1024;
    }
}
sainfo anonymous {
    encryption_algorithm aes,3des;
    authentication_algorithm hmac_sha1;
    compression_algorithm deflate;
    pfs_group modp1024;
}

Политики безопасности (/etc/ipsec-tools.conf), без них NAT не будет работать:

#!/usr/sbin/setkey -f
spdadd 0.0.0.0/0 [l2tp] 0.0.0.0/0 udp -P out ipsec
    esp/transport//require;
spdadd 0.0.0.0/0 0.0.0.0/0 [l2tp] udp -P in ipsec
    esp/transport//require;

Разрешаем 2 IPSec протокола (ESP и AH) и 2 порта для IKE (500 и 4500):

# iptables -A INPUT -p esp -j ACCEPT
# iptables -A OUTPUT -p esp -j ACCEPT
# iptables -A INPUT -p ah -j ACCEPT
# iptables -A OUTPUT -p ah -j ACCEPT
# iptables -A INPUT -p udp --dport 500 -j ACCEPT
# iptables -A OUTPUT -p udp --dport 500 -j ACCEPT
# iptables -A INPUT -p udp --dport 4500 -j ACCEPT
# iptables -A OUTPUT -p udp --sport 4500 -j ACCEPT

xl2tpd

Конфигурационный файл (/etc/xl2tpd/xl2tpd.conf):

[global]
ipsec saref = yes
force userspace = yes
listen-addr = 1.2.3.4
[lns default]
local ip = 10.203.123.200
ip range = 10.203.123.201-10.203.123.210
refuse pap = yes
require authentication = yes
ppp debug = yes
length bit = yes
pppoptfile = /etc/ppp/options.xl2tpd

Конфигурационный файл pppd (/etc/ppp/options.xl2tpd):

ms-dns 8.8.8.8
ms-dns 8.8.4.4
require-mschap-v2
asyncmap 0
auth
crtscts
lock
hide-password
modem
debug
name l2tpd
proxyarp
lcp-echo-interval 10
lcp-echo-failure 100

Авторизация по паролю в xl2tpd (/etc/ppp/chap-secrets):

client * password *

iptables настройки, открываем UDP порт 1701 (в порт не должен попадать IPSec трафик) и настройка NAT:

# iptables -A INPUT -p udp -m policy --dir in --pol ipsec -m udp --dport 1701 -j ACCEPT
# iptables -A OUTPUT -p udp -m policy --dir out --pol ipsec -m udp --dport 1701 -j ACCEPT
# iptables -A FORWARD -i ppp+ -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
# iptables -t nat -A POSTROUTING -o eth0 -s 10.203.123.1/24 -j MASQUERADE
# iptables -A FORWARD -s 10.203.123.0/24 -j ACCEPT

sysctl (/etc/sysctl.conf):

net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.icmp_ignore_bogus_error_responses = 1

Сохранение состояния и запуск демонов:

# sysctl -p
# iptables-save > /etc/iptables.up.rules
# cat /etc/network/if-up.d/iptables 
#!/bin/sh
iptables-restore < /etc/iptables.up.rules
# chmod u+x /etc/network/if-up.d/iptables
# /etc/init.d/setkey restart
# /etc/init.d/racoon restart
# /etc/init.d/xl2tpd restart

Настройка L2TP в Windows 7:

Выше мы сгенерировали все клиентские ключи, скачиваем их на систему. Это 2 файла: /root/EasyRSA-2.2.2/keys/ca.crt и /root/EasyRSA-2.2.2/keys/client.p12. Импортируем их к пользователю двойным щелчком по ним, а также на систему через оснастку Certificates. Нужно выполнить mmc, и добавить ее для работы с ней:

Оснастка Certificates
Рисунок 1 - Оснастка Certificates

Внутри оснастки переходим Personal, далее Certificates, жмем Import. Внутри указываем на client.p12:

Certificates - Настройка
Рисунок 2 - Certificates - Настройка

Сертификаты импортированы. Настраиваем соединение:

VPN соединение
Рисунок 3 - VPN соединение

Внутри настройщика, в принципе, все понятно: Connect to a workspace, Use my Internet connection (VPN), вводим IP-адрес нашего VPN сервера, логин-пароль и соединяемся =)

Если будут вопросы, задавайте. Охотно отвечу. Желаю успехов!

Теги → ipsec vpn l2tp windows