У меня есть сервер удаленного доступа StrongSwan IPSec, работающий на RHEL, и клиент в одной локальной сети. У меня есть сервер Samba, работающий на том же хосте RHEL, который я хочу сделать доступным через VPN, но не за пределами туннеля. Я могу успешно настроить туннель IPSec (пришлось создать профиль MacOS с помощью Apple Configurator2, включив Perfect Forward Security, чтобы обеспечить соответствие набору шифров), но я не могу правильно направить трафик на сервер.Я сделал захват пакетов, и я мог видеть входящие ESP и расшифрованные пакеты ICMP из ping от клиента, но сервер не мог ответить. Я провел несколько выходных, пытаясь выяснить, какие правила iptables мне нужны для подключения, но я думаю, что мне не хватает какого-то понимания. Я смог настроить OpenVPN и WireGuard VPN без проблем с интерфейсами tun, но IPSec, насколько я понимаю, расшифровывается политикой в ядре, поэтому я не знаком с тем, как это повлияет на маршрутизацию.
Я основывал свою установку на официальных примерах документов StrongSwan для удаленный доступ, использовал это документ конфигурации swanctl, читать сообщения на форуме и переводить старый формат в новый с помощью это - а также читать о пересылка и VPN на основе маршрутов - но я думаю, что мне просто не хватает общего понимания того, как трафик маршрутизируется внутри VPN-сервера.
Логическая сетевая диаграмма
Логическая сетевая диаграмма
swanctl.conf (с комментариями других вещей, которые я пробовал)
связи {
ikev2-впн {
фрагментация=да
rekey_time = 0 с
#мобайк = нет
версия=2
предложения = aes256gcm16-prfsha384-ecp384
remote_addrs=%любой
локальные_адреса = 192.168.1.15
#випс=10.0.3.1
#remote_addrs=192.168.1.23
#пулы=10.0.3.0/24
#encap=да
#dpd_delay=300 сек.
пулы = пул1, пул2
#if_id_in=6
#if_id_out=6
дети {
ikev2-впн {
#start_action=нет
esp_proposals=aes256gcm16-prfsha384-ecp384
#local_ts=10.0.3.1/32
локальные_тс=10.0.1.0/24
remote_ts=10.0.2.0/24
#remote_ts=10.0.3.10-10.0.3.200
#dpd_action=очистить
updown=/usr/libexec/strongswan/_updown iptables
}
}
местный {
авторизация = ecdsa-384-sha384
сертификаты = /etc/strongswan/ipsec.d/certs/server.crt
идентификатор = 192.168.1.15
}
удаленный {
авторизация = ecdsa-384-sha384
идентификатор =% любой
}
}
}
бассейны {
пул1 {
#адрес=10.0.3.0/24
адрес=10.0.1.0/24
}
бассейн2 {
#адрес=10.0.3.10-10.0.3.200
адрес=10.0.2.0/24
}
}
секреты {
ecdsa-сервер {
file=/etc/strongswan/ipsec.d/private/server.key
}
ecdsa-клиент {
file=/etc/strongswan/ipsec.d/private/client.key
}
}
органы власти {
центр сертификации {
cacert = /etc/strongswan/ipsec.d/cacerts/ca.crt
}
}
swanctl --list-sas
ikev2-vpn: #2, УСТАНОВЛЕН, IKEv2, c98d6dc49ca0acd4_i 85342c9a0809e294_r*
местный '192.168.1.15' @ 192.168.1.15[4500]
удаленный 'client2.vpn' @ 192.168.1.23[4500] [10.0.1.1]
AES_GCM_16-256/PRF_HMAC_SHA2_384/ECP_384
установлен 53с назад
ikev2-vpn: #4, требуется 1, УСТАНОВЛЕНО, ТУННЕЛЬ, ESP:AES_GCM_16-256
установлен 53 с назад, смена ключей через 3247 с, срок действия истекает через 3907 с
в c334ea0b, 0 байт, 0 пакетов
out 021348d4, 0 байт, 0 пакетов
местный 10.0.1.0/24
удаленный 10.0.2.0/24
swanctl --список-соединений
ikev2-vpn: IKEv2, без повторной аутентификации, без смены ключей
местный: 192.168.1.15
удаленный: % любой
локальная аутентификация с открытым ключом:
идентификатор: 192.168.1.15
сертификаты: [CERT_DN]
удаленная аутентификация с открытым ключом:
идентификатор: %любой
ikev2-vpn: TUNNEL, смена ключей каждые 3600 сек.
местный: 10.0.1.0/24
удаленный: 10.0.2.0/24
ip -s состояние xfrm
источник 192.168.1.15 приемник 192.168.1.23
proto esp spi 0x021348d4 (34818260) требуется 1 (0x00000001) туннель режима
окно воспроизведения 0 seq 0x00000000 флаг af-unspec (0x00100000)
aead rfc4106(gcm(aes)) [KEY] (288 бит) 128
контекст защиты от повторного воспроизведения: seq 0x0, oseq 0x0, растровое изображение 0x00000000
пожизненная конфигурация:
предел: мягкий (INF) (байты), жесткий (INF) (байты)
предел: мягкий (INF) (пакеты), жесткий (INF) (пакеты)
истечение срока действия: мягкое 3418 (сек), жесткое 3960 (сек)
истекает использование: мягкий 0 (сек), жесткий 0 (сек)
ток жизни:
0 (байты), 0 (пакеты)
добавить [ВРЕМЯ] использовать -
статистика:
окно воспроизведения 0 повтор 0 не удалось 0
источник 192.168.1.23 приемник 192.168.1.15
proto esp spi 0xc334ea0b(3275024907) требуется 1(0x00000001) туннель режима
окно воспроизведения 32 seq 0x00000000 флаг af-unspec (0x00100000)
aead rfc4106(gcm(aes)) [KEY] (288 бит) 128
контекст защиты от повторного воспроизведения: seq 0xc, oseq 0x0, растровое изображение 0x00000fff
пожизненная конфигурация:
предел: мягкий (INF) (байты), жесткий (INF) (байты)
предел: мягкий (INF) (пакеты), жесткий (INF) (пакеты)
истечение срока действия: мягкое 3300 (сек), жесткое 3960 (сек)
истекает использование: мягкий 0 (сек), жесткий 0 (сек)
ток жизни:
1008 (байт), 12 (пакетов)
добавить [ВРЕМЯ] использовать [ВРЕМЯ]
статистика:
окно воспроизведения 0 повтор 0 не удалось 0
Показать политику ip xfrm
источник 10.0.1.0/24 приемник 10.0.2.0/24
dir out приоритет 375423 ptype main
tmpl src 192.168.1.15 dst 192.168.1.23
proto esp spi 0x021348d4 требуется туннель режима 1
источник 10.0.2.0/24 приемник 10.0.1.0/24
dir fwd приоритет 375423 ptype основной
tmpl src 192.168.1.23 dst 192.168.1.15
proto esp reqid 1 режим туннеля
источник 10.0.2.0/24 приемник 10.0.1.0/24
директор в приоритете 375423 ptype основной
tmpl src 192.168.1.23 dst 192.168.1.15
proto esp reqid 1 режим туннеля
источник 0.0.0.0/0 приемник 0.0.0.0/0
сокет с приоритетом 0 ptype main
источник 0.0.0.0/0 приемник 0.0.0.0/0
приоритет выхода сокета 0 ptype main
источник 0.0.0.0/0 приемник 0.0.0.0/0
сокет с приоритетом 0 ptype main
источник 0.0.0.0/0 приемник 0.0.0.0/0
приоритет выхода сокета 0 ptype main
источник ::/0 приемник ::/0
сокет с приоритетом 0 ptype main
источник ::/0 приемник ::/0
приоритет выхода сокета 0 ptype main
источник ::/0 приемник ::/0
сокет с приоритетом 0 ptype main
источник ::/0 приемник ::/0
приоритет выхода сокета 0 ptype main
iptables-сохранить
# Сгенерировано iptables-save v1.8.4
*безопасность
:ВВОД ПРИНЯТЬ [22858074:106762962340]
:ВПЕРЕД ПРИНЯТЬ [7:588]
: ВЫВОД ПРИНЯТ [13832427:3964756363]
СОВЕРШИТЬ
# Сгенерировано iptables-save v1.8.4
*сырой
: ПРЕДВАРИТЕЛЬНОЕ ПРИНЯТИЕ [22858911:106763119967]
: ВЫВОД ПРИНЯТ [13832428:3964756655]
СОВЕРШИТЬ
# Сгенерировано iptables-save v1.8.4
* калечить
: ПРЕДВАРИТЕЛЬНОЕ ПРИНЯТИЕ [22858911:106763119967]
:ВВОД ПРИНЯТЬ [22858308:106763007491]
:ВПЕРЕД ПРИНЯТЬ [7:588]
: ВЫВОД ПРИНЯТ [13832428:3964756655]
:ОТПРАВКА ПРИНЯТИЯ [13833383:3964877586]
:LIBVIRT_PRT - [0:0]
-A ОТПРАВКА -j LIBVIRT_PRT
-A LIBVIRT_PRT -o virbr0 -p udp -m udp --dport 68 -j КОНТРОЛЬНАЯ СУММА --checksum-fill
СОВЕРШИТЬ
# Сгенерировано iptables-save v1.8.4
*натуральный
: ПРЕДВАРИТЕЛЬНОЕ ПРИНЯТИЕ [186346:34394324]
:ВВОД ПРИНЯТЬ [185651:34259782]
:ОТПРАВКА ПРИНЯТИЯ [16086:1727773]
: ВЫВОД ПРИНЯТ [16085:1727689]
:LIBVIRT_PRT - [0:0]
-A ОТПРАВКА -j LIBVIRT_PRT
-A РАЗМЕЩЕНИЕ -s 172.16.0.0/24 -o enp0s31f6 -j МАСКАРАД
-A LIBVIRT_PRT -s 192.168.122.0/24 -d 224.0.0.0/24 -j ВОЗВРАТ
-A LIBVIRT_PRT -s 192.168.122.0/24 -d 255.255.255.255/32 -j ВОЗВРАТ
-A LIBVIRT_PRT -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535
-A LIBVIRT_PRT -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535
-A LIBVIRT_PRT -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j МАСКАРАД
СОВЕРШИТЬ
# Сгенерировано iptables-save
*фильтр
: ВВОД ПРИНЯТЬ [22831621:106727043679]
:ВПЕРЕД ПРИНЯТЬ [0:0]
: ВЫВОД ПРИНЯТ [13832420:3964757167]
:LIBVIRT_INP - [0:0]
:LIBVIRT_OUT - [0:0]
:LIBVIRT_FWO - [0:0]
:LIBVIRT_FWI - [0:0]
:LIBVIRT_FWX - [0:0]
-A FORWARD -s 10.0.2.0/24 -d 10.0.1.0/24 -i enp0s31f6 -m policy --dir in --pol ipsec --reqid 1 --proto esp -j ПРИНЯТЬ
-A FORWARD -s 10.0.1.0/24 -d 10.0.2.0/24 -o enp0s31f6 -m policy --dir out --pol ipsec --reqid 1 --proto esp -j ПРИНЯТЬ
-A LIBVIRT_INP -i virbr0 -p udp -m udp --dport 53 -j ПРИНЯТЬ
-A LIBVIRT_INP -i virbr0 -p tcp -m tcp --dport 53 -j ПРИНЯТЬ
-A LIBVIRT_INP -i virbr0 -p udp -m udp --dport 67 -j ПРИНЯТЬ
-A LIBVIRT_INP -i virbr0 -p tcp -m tcp --dport 67 -j ПРИНЯТЬ
-A LIBVIRT_OUT -o virbr0 -p udp -m udp --dport 53 -j ПРИНЯТЬ
-A LIBVIRT_OUT -o virbr0 -p tcp -m tcp --dport 53 -j ПРИНЯТЬ
-A LIBVIRT_OUT -o virbr0 -p udp -m udp --dport 68 -j ПРИНЯТЬ
-A LIBVIRT_OUT -o virbr0 -p tcp -m tcp --dport 68 -j ПРИНЯТЬ
-A LIBVIRT_FWO -s 192.168.122.0/24 -i virbr0 -j ПРИНЯТЬ
-A LIBVIRT_FWO -i virbr0 -j REJECT --reject-with-icmp-port-unreachable
-A LIBVIRT_FWI -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate СВЯЗАННО, УСТАНОВЛЕНО -j ПРИНЯТЬ
-A LIBVIRT_FWI -o virbr0 -j REJECT --reject-with-icmp-port-unreachable
-A LIBVIRT_FWX -i virbr0 -o virbr0 -j ПРИНЯТЬ
СОВЕРШИТЬ