Вопрос или проблема
Я хочу создать два туннеля Solaris10, зашифрованных с помощью IPsec. Конфигурация проста: 2 узла Solaris10, LAN не зашифрован, туннель зашифрован. LAN — это e1000g0, а туннель — ip.tun0. IP “очистки” для узла1 — 192.168.0.21, IP “очистки” для узла2 — 192.168.0.199. Я выполняю эту процедуру.
a) Включил пересылку IPv4 и маршрутизацию на обоих узлах.
routeadm -u -e ipv4-routing
routeadm -u -e ipv4-forwarding
b) Отредактировал /etc/inet/ike/config на обоих узлах.
p1_xform
{ auth_method preshared oakley_group 5 auth_alg sha encr_alg 3des }
p2_pfs 2
c) Отредактировал /etc/inet/secret/ike.preshared на обоих узлах, конечно, с обратными локальными/удаленными адресами.
{ localidtype IP
localid 192.168.0.21
remoteidtype IP
remoteid 192.168.0.119
}
d) Включил IKE на обоих узлах, svcs confirm работает.
svcadm enable ike
svcs ike
e) Отредактировал файл /etc/inet/ipsecinit.conf.
# Трафик LAN от и к этому хосту может обходить IPsec.
{laddr 192.168.0.0 dir both} bypass {}
# Трафик WAN использует ESP с AES и SHA-1.
{tunnel ip.tun0 negotiate tunnel}
ipsec {encr_algs aes encr_auth_algs sha1 sa shared}
f) Обновил..
svcadm refresh ipsec/policy
g) Кажется, все в порядке, поэтому я создаю туннель.
svcs -a|grep -i ipsec
disabled 9:35:34 svc:/network/ipsec/manual-key:default
online 9:35:53 svc:/network/ipsec/ipsecalgs:default
online 9:35:53 svc:/network/ipsec/ike:default
online 9:54:38 svc:/network/ipsec/policy:default
На HostA
ifconfig ip.tun0 plumb
ifconfig ip.tun0 192.168.192.24 192.168.192.40 tsrc 192.168.0.21 tdst 192.168.0.199 router up
На HostB
ifconfig ip.tun0 plumb
ifconfig ip.tun0 192.168.192.40 192.168.192.24 tsrc 192.168.0.199 tdst 192.168.0.21 router up
Кажется, все ОК, но… не работает.
HostA может пинговать HostB.
ping 192.168.0.199
192.168.0.199 жив
HostB может пинговать HostA.
ping 192.168.0.2
192.168.0.2 жив
Но если я пингую туннель…
С HostA на HostB
ping -s 192.168.192.40
PING 192.168.192.40: 56 data bytes
----192.168.192.40 PING Statistics----
25 packets transmitted, 0 packets received, 100% packet loss
С HostB на HostA
ping -s 192.168.192.24
PING 192.168.192.24: 56 data bytes
----192.168.192.24 PING Statistics----
25 packets transmitted, 0 packets received, 100% packet loss
На hostA netstat -rn говорит:
netstat -rn
Routing Table: IPv4
Destination Gateway Flags Ref Use Interface
-------------------- -------------------- ----- ----- ---------- ---------
default 192.168.0.1 UG 1 1
192.168.0.0 192.168.0.21 U 1 3 e1000g0
192.168.192.40 192.168.192.24 UH 1 0 ip.tun0
224.0.0.0 192.168.0.21 U 1 0 e1000g0
127.0.0.1 127.0.0.1 UH 1 48 lo0
На HostB netstat -rn говорит:
Routing Table: IPv4
Destination Gateway Flags Ref Use Interface
-------------------- -------------------- ----- ----- ---------- ---------
default 192.168.0.1 UG 1 2 e1000g0
192.168.0.0 192.168.0.199 U 1 7 e1000g0
192.168.192.24 192.168.192.40 UH 1 1 ip.tun0
127.0.0.1 127.0.0.1 UH 3 122 lo0
Что я пропустил? Файрвол отключен на обоих узлах.
Решение найдено. Ошибка была в синтаксисе многих конф. файлов. Сначала файл.
/etc/inet/secret/ike.preshared
должен выглядеть так, IP для использования должен быть IP туннеля, а не IP “основного” интерфейса.
# ike.preshared на hostA
#…
{ localidtype IP
localid 10.4.0.1
remoteidtype IP
remoteid 10.4.0.2
key keyinhexformat
# Предварительно общий ключ также может быть представлен в шестнадцатеричном формате
# как в 0xf47cb0f432e14480951095f82b
# key "Это ASCII ключевое слово, используйте надежные техники паролей"
}
Чтобы сгенерировать ключ в шестнадцатеричном формате, используйте эту команду:
echo "mypassword" | od -t x1|head -1|tr -d ' '
Файл
/etc/inet/ike/config
должен быть подобен этому, даже в этом случае используйте IP туннеля, а не IP основного интерфейса.
p1_xform
{ auth_method preshared oakley_group 5 auth_alg sha encr_alg 3des }
p2_pfs 2
{ label "test1-test2" local_addr 10.4.0.1 remote_addr 10.4.0.2 p1_xform { auth_method preshared oakley_group 5 auth_alg sha256 encr_alg aes } p2_pfs 5 }
Конечно, на hostB должны быть обратные 10.4.0.1 и 10.4.0.2 для обоих файлов.
В конечном итоге отредактируйте файл /etc/inet/ipsecinit.conf.
{laddr 192.168.0.21 dir both} bypass {}
{laddr 10.4.0.1 raddr 10.4.0.2} ipsec {encr_algs aes encr_auth_algs sha256 sa shared}
Конечно, на hostB должны быть обратные 10.4.0.1 и 10.4.0.2, и 192.168.0.21 должен быть заменен на основной IP hostB.
Теперь запустите сценарий на hostA.
ifconfig ip.tun0 unplumb
ifconfig ip.tun0 plumb
ifconfig ip.tun0 10.4.0.1 10.4.0.2 netmask 255.255.255.0 tsrc 192.168.0.21 tdst 192.168.0.199 router up
for i in ike ipsec/policy;do svcadm refresh $i; done
Теперь запустите сценарий на hostB.
ifconfig ip.tun0 unplumb
ifconfig ip.tun0 plumb
ifconfig ip.tun0 10.4.0.2 10.4.0.1 netmask 255.255.255.0 tsrc 192.168.0.199 tdst 192.168.0.21 router up
for i in ike ipsec/policy;do svcadm refresh $i; done
И все работает, тестируйте с помощью ping и snoop.
Ответ или решение
Подключение IPsec-туннеля на Solaris 10: Анализ и Решение Проблемы
Вопрос о настройке IPsec-туннеля между двумя узлами Solaris 10 поднимает несколько аргументов, касающихся предварительной конфигурации и совместимости настроек. При рассмотрении нашей ситуации, описанной в вопросе, важно уделить внимание каждому этапу настройки, чтобы убедиться, что все шаги выполнены правильно. Давайте рассмотрим детали конфигурации и то, как исправить выявленные ошибки.
Анализ Проблемы
-
Понимание Конфигурации Туннеля:
Ваши узлы (HostA и HostB) были настроены для работы с туннелем через интерфейсip.tun0
, при этом каждый узел имел свои "чистые" IP-адреса. Однако при отправке пинга на туннельные IP-адреса не удавалось получить ответ. Это может быть связано с неправильной настройкой идентификаторов и интерфейсов. -
Ошибки в Конфигурации:
Основная проблема заключалась в том, что в файлах конфигурации (/etc/inet/ike/config
и/etc/inet/secret/ike.preshared
) использовались не те IP-адреса. Вместо использования туннельных адресов (например, 192.168.192.24 и 192.168.192.40) вы должны использовать адреса туннеля (например, 10.4.0.1 и 10.4.0.2).
Корректировки и Рекомендации
-
Настройка файла
/etc/inet/secret/ike.preshared
:
В этом файле необходимо указать следующие параметры, включая ключи и адреса туннеля:{ localidtype IP localid 10.4.0.1 remoteidtype IP remoteid 10.4.0.2 key keyinhexformat }
Ключ можно сгенерировать с помощью команды:
echo "mypassword" | od -t x1 | head -1 | tr -d ' '
-
Настройка файла
/etc/inet/ike/config
:
Здесь нужно отразить правильные адреса туннелей и шифрования:p1_xform { auth_method preshared oakley_group 5 auth_alg sha encr_alg 3des } p2_pfs 2 { label "test1-test2" local_addr 10.4.0.1 remote_addr 10.4.0.2 p1_xform { auth_method preshared oakley_group 5 auth_alg sha256 encr_alg aes } p2_pfs 5 }
-
Настройка файла
/etc/inet/ipsecinit.conf
:
Обязательно указывать правильные адреса сетевых интерфейсов:{laddr 192.168.0.21 dir both} bypass {} {laddr 10.4.0.1 raddr 10.4.0.2} ipsec {encr_algs aes encr_auth_algs sha256 sa shared}
-
Перезагрузка интерфейсов и служб:
После внесения изменений не забудьте перезагрузить интерфейсы и службы IPsec:ifconfig ip.tun0 unplumb ifconfig ip.tun0 plumb ifconfig ip.tun0 10.4.0.1 10.4.0.2 netmask 255.255.255.0 tsrc 192.168.0.21 tdst 192.168.0.199 router up for i in ike ipsec/policy; do svcadm refresh $i; done
И аналогичные команды на HostB, поменяв IP адреса местами.
Заключение
После выполнения данных шагов и корректировки конфигурации вы получите рабочий IPsec-туннель между двумя узлами Solaris 10. Всегда важно помнить, что при настройке подобных систем точность в конфигурациях и использование правильных IP-адресов критичны для успеха соединения. Применяйте на практике предложенные решения и проверяйте их работоспособность с помощью утилит, таких как ping
или snoop
, для диагностики сетевых проблем.