Я уже часами искал на этом и многих других сайтах, и хотя у людей были похожие проблемы, я не нашел ни одного, который мог бы решить мою проблему.
Я пытаюсь настроить туннель IPsec со своего компьютера на виртуальную машину на сервере с помощью strongswan (by swanctl.conf). Я ранее установил соединение IPsec, но с другого устройства. Я использую ту же конфигурацию (swanctl.conf), но что-то другое мне не подходит. Моя машина (10.3.72.29) получает виртуальный IP-адрес (172.13.14.2) и устанавливает соединение с серверным устройством (10.3.218.62) с собственным виртуальным IP-адресом (192.168.122.2)
Моя текущая конфигурация:
Мой компьютер (инициатор) swanctl.conf:
connections {
ch_vti0 {
send_cert = always
encap = yes
vips = 0.0.0.0
remote_addrs = 10.3.218.62
local {
round = 1
id = 10.3.72.29
auth = psk
certs =
}
remote {
auth = psk
id = 10.3.218.62
certs =
}
children {
ch_vti0 {
mark_in = 42
mark_out = 42
remote_ts = 192.168.122.2/24
local_ts = dynamic
inactivity = 300s
mode = tunnel
esp_proposals = 3des-sha1-modp2048
updown = /usr/local/etc/swanctl/updown.sh 0
}
}
version = 1
proposals = des-md5-modp768, des-md5-modp1024, des-md5-modp1536
} }
secrets {
eap-xauth {
eap_id = test1
id = test1
secret = password
}
xauth-local {
id = test1
secret = password
}
ike-sec {
id = %any
secret = test
}
ike-local {
id = 10.3.72.29
secret = test
}
}
Виртуальная машина сервера swanctl.conf:
connections {
ch_vti0 {
send_cert = always
encap = yes
pools = pools_users
#aggressive = yes
local {
round = 1
id = 10.3.218.62
auth = psk
certs =
}
remote {
auth = psk
id = %any
certs =
}
children {
ch_vti0 {
local_ts = 192.168.122.2/24
inactivity = 120s
mode = tunnel
esp_proposals = 3des-sha1-modp2048
updown = /usr/local/libexec/ipsec/_updown iptables
}
}
version = 0
proposals = des-md5-modp768, des-md5-modp1024, des-md5-modp1536
} }
pools {
pools_users {
addrs = 172.13.14.2/24
}
}
secrets {
eap-xauth {
eap_id = test1
id = test1
secret = password
}
xauth-local {
id = test1
secret = password
}
ike-sec {
id = %any
secret = test
}
ike-local {
id = 10.3.218.62
secret = test
}
}
Если кому-то интересно, сценарий updown.sh создает интерфейс vti0 и маршрутизирует
Результат ipsec statusall на моем ПК:
Listening IP addresses:
10.3.72.29
fdc8:c2cb:4586:cc11::8f00:5a9
172.13.14.2
Connections:
ch_vti0: %any...10.3.218.62 IKEv1
ch_vti0: local: [10.3.72.29] uses pre-shared key authentication
ch_vti0: remote: [10.3.218.62] uses pre-shared key authentication
ch_vti0: child: dynamic === 192.168.122.0/24 TUNNEL
Security Associations (1 up, 0 connecting):
ch_vti0[1]: ESTABLISHED 13 minutes ago, 10.3.72.29[10.3.72.29]...10.3.218.62[10.3.218.62]
ch_vti0[1]: IKEv1 SPIs: 7fa996a60f87e923_i* 4faa8dbdd74a5927_r, rekeying in 3 hours
ch_vti0[1]: IKE proposal: DES_CBC/HMAC_MD5_96/PRF_HMAC_MD5/MODP_768
ch_vti0{1}: INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: c393a4bb_i c392a387_o
ch_vti0{1}: 3DES_CBC/HMAC_SHA1_96/MODP_2048, 65772 bytes_i (783 pkts, 0s ago), 0 bytes_o, rekeying in 42 minutes
ch_vti0{1}: 172.13.14.2/32 === 192.168.122.0/24
Устройство сервера:
Listening IP addresses:
192.168.122.2
10.3.218.62
fdc8:c2cb:4586:cc12::e49c:faf8
Connections:
ch_vti0: %any...%any IKEv1/2
ch_vti0: local: [10.3.218.62] uses pre-shared key authentication
ch_vti0: remote: [%any] uses pre-shared key authentication
ch_vti0: child: 192.168.122.0/24 === dynamic TUNNEL
Security Associations (1 up, 0 connecting):
ch_vti0[1]: ESTABLISHED 14 minutes ago, 10.3.218.62[10.3.218.62]...10.3.72.29[10.3.72.29]
ch_vti0[1]: IKEv1 SPIs: 7fa996a60f87e923_i 4faa8dbdd74a5927_r*, rekeying in 3 hours
ch_vti0[1]: IKE proposal: DES_CBC/HMAC_MD5_96/PRF_HMAC_MD5/MODP_768
ch_vti0{1}: INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: c392a387_i c393a4bb_o
ch_vti0{1}: 3DES_CBC/HMAC_SHA1_96/MODP_2048, 0 bytes_i, 68880 bytes_o (820 pkts, 0s ago), rekeying in 44 minutes
ch_vti0{1}: 192.168.122.0/24 === 172.13.14.2/32
Маршруты на моем компьютере:
root@malz:/usr/local/etc/swanctl# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.3.127.1 0.0.0.0 UG 100 0 0 enp2s0
10.3.0.0 0.0.0.0 255.255.0.0 U 100 0 0 enp2s0
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 vti0
Маршруты на устройстве сервера:
root@server-automation-2:/etc/swanctl# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.3.127.1 0.0.0.0 UG 0 0 0 ens4
10.3.0.0 0.0.0.0 255.255.0.0 U 0 0 0 ens4
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 ens3
Я разрешил порты, которые использует IPsec (500,4500,4500 / udp, 500 / udp), попытался отключить брандмауэры на обоих из них, очистил iptables и разрешил все:
iptables -F
iptables -I INPUT -j ACCEPT
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
Я также проверил параметры sysctl для отбрасывания пакетов (особенно тех, которые касаются запросов icmp)
Если я пытаюсь перехватить пакеты с помощью tcpdump, я вижу, что получаю их с устройства сервера (ping icmp-пакеты), но мой компьютер не отвечает
Если я пытаюсь отправить пакеты, устройство сервера не перехватывает их, и количество пакетов ошибок TX интерфейса IPsec моего ПК увеличивается. Из ifconfig:
vti0: flags=209<UP,POINTOPOINT,RUNNING,NOARP> mtu 1480
inet 172.13.14.2 netmask 255.255.255.255 destination 172.13.14.2
inet6 fe80::5efe:a03:481d prefixlen 64 scopeid 0x20<link>
tunnel txqueuelen 1000 (IPIP Tunnel)
RX packets 1063 bytes 89292 (89.2 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 57 dropped 0 overruns 0 carrier 57 collisions 0
В заключение, я установил соединение ipsec между двумя машинами, но я не могу понять, почему одна из них не может передавать пакеты и не отвечает на пинги других. Я совершенно уверен, что причина всего этого не в конфигурации ipsec, потому что я уже упоминал ранее, что тестировал ее раньше, и она работает с тем же самым файлом conf (за исключением изменения IPS).
Если кто-нибудь может дать мне хоть намек, я был бы очень признателен.
Шаги устранения неполадок (снизу вверх):
Запустите tcpdump. Вы должны увидеть чистые и зашифрованные пакеты (ESP).
Проверьте IP-соединение между концами туннеля ipsec.
Проверить маршрутизацию. По умолчанию strongswan устанавливает дополнительные маршруты в отдельную таблицу маршрутизации. Бегать ip -4 r ls table 220
. Исследуйте вывод. Чтобы проверить фактические маршруты, используйте ip route get <dst>
команда. Не используйте route -n
команда - возвращает незавершенное представление.
Проверьте вывод ip -s -s xfrm state list
и ip -s -s -d xfrm policy list
. Он показывает систему SADB (База данных ассоциаций безопасности) и базу данных политик. В вашем интерфейсе vti есть ошибки оператора связи. Ошибка оператора связи на интерфейсе vti означает:
ip x p get ...
команда.ip route get ...
команда.ip x s ls
команда.Проверьте брандмауэр. Команда iptables по умолчанию работает с filter
table, но есть и другие таблицы (raw, nat, mangle). Лучше используйте iptables-save -c
команда, чтобы вывести полный набор правил. После изменения правил nat очистите таблицу conntrack с conntrack -F
команда. Трафик ipsec дважды проходит цепочки межсетевого экрана: один проходит как зашифрованный, другой - как чистый. Так что исследуйте правила. Также вы можете вставить NFLOG
целевые правила для захвата трафика tcpdump -ni nflog...
команда.