В этой публикации мы расскажем, как настроить EdgeRouter L2TP (протокол туннелирования уровня 2), используя локальную аутентификацию. Этот пример основан на проверке «до совместного использования» и не фокусируется на аутентификации на основе сертификата.
Важно! Применимо к прошивке EdgeOS 1.9.1+ во всех моделях EdgeRouter. Требуется знание интерфейса командной строки (CLI) и базовых сетевых знаний.
Что используем?
- EdgeRouter-X (ER-X)
- Тестовый клиент (Host1 and Server1)
Что делаем?
- Топология сети
- L2TP сервер
- Правила Firewall
- Windows-клиент
- Тестирование и результат
Топология сети
Сетевая топология представлена ниже. IP адреса и интерфейсы, использованные Host1 и клиентским роутером не соответствуют этому примеру. Используя L2TP терминологию, ER-X является "L2TP-сервером", в то время как Host1 является "L2TP-клиентом".
Для ER используются следующие интерфейсы:
- eth0 (WAN) - 203.0.113.1
- eth1 (LAN) - 192.168.1.1/24
L2TP-сервер
В этом примере ER был предварительно настроен с помощью "Мастера базовой установки" (Basic setup wizard). Мы предположим, что хосты локальной сети могут быть связаны с хостами в Интернете.
UDP порты и протоколы, относящиеся к L2TP:
- UDP 1701 (L2TP)
- UDP 500 (IKE)
- ESP (Protocol 50)
- UDP 4500 (NAT-T)
CLI STEPS: Получите доступ к интерфейсу командной строки (CLI). Вы можете сделать это, используя CLI-кнопку в GUI или используя программу PuTTY.
1. Запустите режим конфигурации.
2. Измените настройки аутентификации сервера (замените своим паролем).
set vpn l2tp remote-access ipsec-settings authentication mode pre-shared-secret
set vpn l2tp remote-access ipsec-settings authentication pre-shared-secret <secret>
Примечание: Если Вы определяете предварительно представленный пароль используя кавычки, убедитесь что пароль на стороне клиента не включает эти самые кавычки. Для примера, set vpn l2tp remote-access ipsec-settings authentication pre-shared-secret пароль 'sup3rSecure' должен выглядеть как 'sup3rSecure' на клиенте.
3.Создайте IP-адрес для использования VPN-клиентами.
set vpn l2tp remote-access client-ip-pool start 192.168.100.240
set vpn l2tp remote-access client-ip-pool stop 192.168.100.249
Примечание: Вы можете также выдавать IP адреса локальной субсети (192.168.1.0/24 в этом случае), но убедитесь, что они не пересекаются с IP адресами, которые выдает Ваш DHCP-сервер, или не используются другими устройствами Вашей сети. Определение адресов в том же радиусе, что и локальная субсеть, не рекомендуется, потому что оно может привести к проблемам с приложениями, которые полагаются на мультикаст (discovery).
4. Определите DNS серверы, которые будут использовать VPN клиенты.
set vpn l2tp remote-access dns-servers server-1 8.8.8.8
set vpn l2tp remote-access dns-servers server-2 8.8.4.4
Вы также можете настроить DNS-сервер как внутренний IP-адрес самого маршрутизатора. В этом случае Вам также понадобится включить DNS пересылку (если она еще не включена) и установить адрес ожидания сети на тот же внутренний IP-адрес.
set vpn l2tp remote-access dns-servers server-1 192.168.1.1
set service dns forwarding options "listen-address=192.168.1.1"
set service dns forwarding cache-size 150
set service dns forwarding listen-on eth1
5. Определите интерфейс WAN, который будете получать L2TP-запросы от клиентов.
Настройте только одно из следующих действий. Определите, какая команда лучше всего подходит для Вашей ситуации, используя следующие параметры:
(A) Ваш интерфейс WAN получает адрес через DHCP.
set vpn l2tp remote-access dhcp-interface eth0
(B) Ваш WAN-интерфейс настроен на статический адрес (замените значение на внешний адрес).
set vpn l2tp remote-access outside-address 203.0.113.1
(C) Ваш WAN-интерфейс получает адрес через PPPoE, или вы используете Dual WAN Load-Balancing.
set vpn l2tp remote-access outside-address 0.0.0.0
Примечание: Когда используются несколько восходящих линий (Dual WAN Load-Balancing), применяйте опцию C. Если Вы используете вариант A или B, Ваш сервер L2TP будет доступен только на одном адресе WAN.
6. Настройте локальную аутентификацию (замените на нужные Вам пользовательские пароли):
set vpn l2tp remote-access authentication mode local
set vpn l2tp remote-access authentication local-users username user1 password <password>
set vpn l2tp remote-access authentication local-users username user2 password <password>
7. (Необязательно) Определите интерфейсы IPsec, которые будут использоваться для L2TP.
Этот шаг зависит от используемой версии прошивки. Официальное использование этой команды устарело в версии 1.8.5.
set vpn ipsec ipsec-interfaces interface eth0
8. (Необязательно) Понизьте MTU для трафика L2TP.
Экспериментируйте с понижением значения MTU, если производительность L2TP низкая. Это может произойти, к примеру, когда внешний интерфейс WAN использует PPPoE (1492 байт MTU).
set vpn l2tp remote-access mtu <mtu-value>
9. (Необязательно) Включите требование от VPN-клиентов использовать определенный протокол аутентификации при подключении.
set vpn l2tp remote-access authentication require [ pap | chap | mschap | mschap-v2 ]
- PAP - Require Password Authentication Protocol
- CHAP - Require Challenge Handshake Authentication Protocol
- MS-CHAP - Require Microsoft Challenge Handshake Authentication Protocol
- MS-CHAP-V2 - Require Microsoft Challenge Handshake Authentication Protocol Version 2
10. Зафиксируйте изменения.
11. Сохраните конфигурацию.
Правила Firewall
Правило WAN_LOCAL, созданное Мастером базовой установки (Basic Setup wizard), не разрешает входящие подключения по умолчанию. Для принятия VPN-трафика необходимо создать правила брандмауэра для L2TP, ESP и IKE.
1. Запустите режим конфигурации.
2. Добавьте дополнительные правила L2TP, IKE, NAT-T и ESP для WAN интерфейсов.
set firewall name WAN_LOCAL rule 30 action accept
set firewall name WAN_LOCAL rule 30 description IKE
set firewall name WAN_LOCAL rule 30 destination port 500
set firewall name WAN_LOCAL rule 30 log disable
set firewall name WAN_LOCAL rule 30 protocol udp
set firewall name WAN_LOCAL rule 40 action accept
set firewall name WAN_LOCAL rule 40 description L2TP
set firewall name WAN_LOCAL rule 40 destination port 1701
set firewall name WAN_LOCAL rule 40 log disable
set firewall name WAN_LOCAL rule 40 protocol udp
set firewall name WAN_LOCAL rule 50 action accept
set firewall name WAN_LOCAL rule 50 description ESP
set firewall name WAN_LOCAL rule 50 log disable
set firewall name WAN_LOCAL rule 50 protocol esp
set firewall name WAN_LOCAL rule 60 action accept
set firewall name WAN_LOCAL rule 60 description NAT-T
set firewall name WAN_LOCAL rule 60 destination port 4500
set firewall name WAN_LOCAL rule 60 log disable
set firewall name WAN_LOCAL rule 60 protocol udp
Примечание. Имя локального правила брандмауэра, применяемого к интерфейсу WAN, может отличаться в Вашей среде. Независимо от схемы, убедитесь, что верное правило брандмауэра применяется в интерфейсе WAN или вручную применяйте его set interfaces ethernet eth0 firewall local name .
3. Зафиксируйте изменения.
4. Сохраните конфигурацию.
Windows-клиент
Существуют различные способы подключения к серверу L2TP с использованием множества приложений и операционных систем. В этой статье мы сосредоточимся только на одном, встроенном VPN-клиенте Windows 10. Причиной выбора этого метода является то, что он обычно используется, и он также имеет важный момент, который стоит обсудить.
1. Перейдите к настройкам Windows 10 (WIN + I)> Сеть и Интернет> Добавить VPN-соединение:
- VPN Провайдер: Windows (встроенный)
- Название соединения: ER-L2TP
- Название сервера: WAN IP-адрес сервера ER
- VPN тип: L2TP/IPsec с предварительно представленным ключом или сертификатом.
2. Перейдите к свойствам сетевого адаптера Windows 10 (WIN + X)> ER-L2TP
Security > Allow these protocols > Microsoft CHAP Version 2 (MS-CHAP v2)
Примечание: Если ваш EdgeRouter находится вне NAT и Вы не можете подключиться к вашему серверу L2TP, это может быть связано с операционной системой Windows и тем, как она обрабатывает трафик IPsec на серверах/маршрутизаторах, расположенных вне устройства NAT. В этом случае примените хотфикс (шаг 3).
3. (Хотфикс) Перейдите в реестр Windows 10 (WIN + R)> regedit
Найдите следующее поддерево реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent
Создайте новое DWORD (32-разрядное) значение в этом поддереве:
AssumeUDPEncapsulationContextOnSendRule
Измените вновь созданное значение DWORD, дайте ему значение 2 (по умолчанию 0) и перезагрузите компьютер.
Тестирование и результат
Последний шаг - протестировать и подтвердить прибытие трафика L2TP на внешний интерфейс и проверить журналы. Если есть проблемы с L2TP VPN, проверьте файлы журнала, чтобы определить проблему. После запуска сеанса L2TP проверьте соединение, используя следующие команды:
1. Проверить состояние IPsec в ER:
sudo ipsec statusall
Status of IKE charon daemon (strongSwan 5.2.2, Linux 3.10.14-UBNT, mips):
uptime: 49 seconds, since Jul 17 14:01:59 2017
malloc: sbrk 376832, mmap 0, used 272072, free 104760
worker threads: 11 of 16 idle, 5/0/0/0 working, job queue: 0/0/0/0, scheduled: 0
Listening IP addresses:
192.168.1.1
203.0.113.1
10.255.255.0
Connections:
remote-access: 203.0.113.1...%any IKEv1, dpddelay=15s
remote-access: local: [203.0.113.1] uses pre-shared key authentication
remote-access: remote: uses pre-shared key authentication
remote-access: child: dynamic[udp/l2f] === dynamic[udp] TRANSPORT, dpdaction=clear
Security Associations (1 up, 0 connecting):
remote-access[1]: ESTABLISHED 30 seconds ago, 203.0.113.1[203.0.113.1]...192.0.2.1[172.16.1.10]
remote-access[1]: IKEv1 SPIs: 7ef8fd033bea7f4c_i 27eaafddd951c8dc_r*, rekeying disabled
remote-access[1]: IKE proposal: AES_CBC_256/HMAC_SHA1_96/PRF_HMAC_SHA1/ECP_384
remote-access{1}: INSTALLED, TRANSPORT, ESP in UDP SPIs: c009fce1_i cd73f1b4_o
remote-access{1}: AES_CBC_128/HMAC_SHA1_96, 3594 bytes_i (36 pkts, 18s ago), 675 bytes_o (17 pkts, 27s ago)
remote-access{1}: 203.0.113.1/32[udp/l2f] === 192.0.2.1/32[udp/l2f]
2. Убедитесь, что трафик увеличивает счетчики на соответствующих правилах Firewall.
show firewall name WAN_LOCAL statistics
------------------------------------------
IPv4 Firewall "WAN_LOCAL" [WAN to router]
Active on (eth0,LOCAL)
rule packets bytes action description
---- ------- ----- ------ -----------
10 2926 271414 ACCEPT Allow established/related
20 0 0 DROP Drop invalid state
30 19 5512 ACCEPT IKE
40 5 655 ACCEPT L2TP
50 0 0 ACCEPT ESP
60 8 1088 ACCEPT NAT-T
10000 69 9516 DROP DEFAULT ACTION
3. Захватите приход трафика L2TP на внешний интерфейс глобальной сети ER:
3. Захватить приход трафика L2TP на внешний интерфейс глобальной сети ER:
4. Захватите журналы ER IPsec VPN:
sudo swanctl --log
[NET] received packet: from 192.0.2.1[500] to 203.0.113.1[500] (408 bytes)
[IKE] 192.0.2.1 is initiating a Main Mode IKE_SA
[IKE] remote host is behind NAT
[CFG] looking for pre-shared key peer configs matching 203.0.113.1...192.0.2.1[172.16.0.10]
[CFG] selected peer config "remote-access"
[IKE] IKE_SA remote-access[15] established between ...
[IKE] CHILD_SA remote-access{5} established with SPIs ...
[KNL] 10.255.255.0 appeared on ppp0
5. IPsec Security Associations (SAs):
show vpn ipsec sa
remote-access: #545, ESTABLISHED, IKEv1, b0a8c5df5ff1b225:a251946b15ebaaae
local '203.0.113.1' @ 203.0.113.1
remote '172.16.0.10' @ 192.0.2.1
AES_CBC-256/HMAC_SHA1_96/PRF_HMAC_SHA1/ECP_384
established 351s ago
remote-access: #17, INSTALLED, TRANSPORT-in-UDP, ESP:AES_CBC-128/HMAC_SHA1_96
installed 8 ago
in cd49a319, 0 bytes, 0 packets
out 47a8a786, 0 bytes, 0 packets
local 76.237.8.193/32[udp/l2f]
remote 192.0.2.1/32[udp/l2f]
6. Пользователи и интерфейсы удаленного доступа:
show vpn remote-access
Active remote access VPN sessions:
User Time Proto Iface Remote IP TX pkt/byte RX pkt/byte
---------- --------- ----- ----- --------------- ------ ------ ------ ------
ubnt 00h01m22s L2TP l2tp0 192.168.100.240 4 58 86 7.4K
show interfaces
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface IP Address S/L Description
--------- ---------- --- -----------
l2tp0 10.255.255.0 u/u User: ubnt (192.168.100.240)
7. Отправить трафик через туннель от Host1 до Server1 и наоборот:
ping 192.168.1.10
PING 192.168.1.10 (192.168.1.10) 56(84) bytes of data.
64 bytes from 192.168.1.10: icmp_seq=1 ttl=63 time=45.9 ms
64 bytes from 192.168.1.10: icmp_seq=2 ttl=63 time=45.2 ms
64 bytes from 192.168.1.10: icmp_seq=3 ttl=63 time=45.5 ms
ping 172.16.1.10
PING 172.16.1.10 (172.16.1.10) 56(84) bytes of data.
64 bytes from 172.16.1.10: icmp_seq=1 ttl=63 time=43.9 ms
64 bytes from 172.16.1.10: icmp_seq=2 ttl=63 time=44.1 ms
64 bytes from 172.16.1.10: icmp_seq=3 ttl=63 time=44.4 ms