Попытка использовать IPSEC между двумя хостами в локальной сети. VPN не задействован
Использование OpenBSD 5.8 (в VirtualBox). Я бы предпочел использовать встроенную поддержку OpenBSD для IPSEC и обмена ключами, а не стороннюю.
Два хоста: 10.0.2.10
(хост "A") и 10.0.2.11
(хост "B")
Они могут пинговать / ssh друг друга, прежде чем пытаться настроить IPSEC.
ОБНОВЛЕНИЕ: я думаю, что OpenIKED (IKE v2) не поддерживает transport
режим, поэтому я тоже приму ответы для isakmp (IKE v1)
Скопировано /etc/iked/local.pub
к B /etc/iked/pubkeys/ipv4/10.0.2.10
Скопировано B /etc/iked/local.pub
как /etc/iked/pubkeys/ipv4/10.0.2.11
На обоих:
echo "ikev2 esp from any to any" > /etc/iked.conf
chmod 640 /etc/iked.conf
echo "ipsec=YES" > /etc/rc.conf.local
echo "iked_flags=" >> /etc/rc.conf.local
Проверить конфигурацию:
/sbin/iked -n
Configuration OK
Я не понимаю, что делать дальше. Думаю, мне нужно настроить /etc/ipsec.conf
, но я нашел там только документацию IKEv1.
Перезагрузили обе машины. Ошибок нет. Говорит, что демон iked запустился. Если я переименую открытые ключи во что-нибудь, я все равно могу пинговать друг друга, поэтому IPSEC, похоже, не работает.
ОБНОВЛЕНИЕ: я получил IPSEC, работающий с ручным обменом ключами
/etc/ipsec.conf
:
# .10 is source, .11 is destination
flow esp from 10.0.2.10 to 10.0.2.11 type require
esp transport from 10.0.2.10 to 10.0.2.11 \
spi 0xCAFEBABE:0xCAFEBABE \
authkey 0x64CHARHEX:0x64CHARHEX \
enckey 0x64CHARHEX:0x64CHARHEX
шестнадцатеричный должен быть в верхнем регистре
chmod 640 /etc/ipsec.conf
ipsecctl -F (delete config)
ipsecctl -f /etc/ipsec.conf (load config)
ipsecctl -s all -v (show config)
Я бы предпочел использовать автоматический ввод IKEv2. Что я могу сделать?
Отвечая на свой вопрос как ботаник
Проблема 1. OpenIKED (IKEv2) не поддерживает транспортный режим, поэтому вы можете использовать его только для VPN, но не в локальной сети. Использовать isakmpd
(IKEv1)
Проблема 2. Документация для ipsec.conf
говорит, что auth
и enc
значения имеют значения по умолчанию, но вам все равно нужно их установить
Что еще мне нужно настроить?
Вам нужно установить правильный rc.d
флаги на isakmpd
(увидеть ниже)
Есть ли журналы для IPSEC и iked, и если да, то где их найти?
Журналы находятся на /var/log/daemon
Как определить, работает ли IPSEC после настройки, не глядя на пакеты между машинами?
на B, беги tcpdump host A
, и на бегу ping B
. Ты хочешь увидеть esp
и spi
в выводе tcpdump
Настроить:
Хост A (10.0.2.10)
# cat << EOF > /etc/ipsec.conf
ike active esp transport from 10.0.2.10 to 10.0.2.11 \
main auth hmac-sha1 enc aes \
quick auth hmac-sha2-256 enc aes
EOF
# chmod 640 /etc/ipsec.conf
# cd /etc/isakmpd/pubkeys/ipv4
# scp notRoot@10.0.2.11:/etc/isakmpd/local.pub 10.0.2.11 `# copy remote's public key`
# rcctl enable ipsec
# rcctl enable isakmpd
# rcctl set isakmpd flags "-KTv" `#K = use ipsec.conf for configuration, T = disable NAT traversal, v = verbose logging`
# ipsecctl -vf /etc/ipsec.conf `# start ipsec, or reboot`
# rcctl start isakmpd
Хост B (10.0.2.11)
# cat << EOF > /etc/ipsec.conf
ike active esp transport from 10.0.2.11 to 10.0.2.10 \
main auth hmac-sha1 enc aes \
quick auth hmac-sha2-256 enc aes
EOF
# chmod 640 /etc/ipsec.conf
# cd /etc/isakmpd/pubkeys/ipv4
# scp notRoot@10.0.2.10:/etc/isakmpd/local.pub 10.0.2.10 `# copy remote's public key`
# rcctl enable ipsec
# rcctl enable isakmpd
# rcctl set isakmpd flags "-KTv" `#K = use ipsec.conf for configuration, T = disable NAT traversal, v = verbose logging`
# ipsecctl -vf /etc/ipsec.conf `# start ipsec, or reboot`
# rcctl start isakmpd
Так что недавно у меня действительно было что-то подобное - просто связь IPSec между одним адресом и моей сетью. Я использовал его для одного из своих телефонных серверов, чтобы попытаться получить TFTP через Интернет (для развлечения).
------------------------- удаленная сторона, мой телефонный сервер ----------------
для /etc/ipsec.conf:
config setup
plutodebug=none
klipsdebug=none
dumpdir=/var/run/pluto/
nat_traversal=yes
protostack=netkey
plutostderrlog=/var/log/ipsec.log
conn L2TP-PSK-noNAT
type=tunnel
authby=secret
pfs=no
compress=no
keyexchange=ike
auth=esp
keyingtries=3
rekey=no
ike=aes256-md5-modp1536
ikelifetime=7800s
esp=aes128-md5
keylife=3600s
left=XXX.XXX.XXX.XXX
leftid=XXX.XXX.XXX.XXX
leftsubnet=XXX.XXX.XXX.XXX/32
####Those three addresses are all the same - No NAT/routing###
right=hq.myDynDNSDomainToMyOffice.com
rightid=hq.myDynDNSDomainToMyOffice.com
rightsourceip=10.0.0.1
rightsubnet=10.0.0.0/24
auto=add
для /etc/ipsec.secrets:
# this file is managed with debconf and will contain the automatically created RSA keys
include /var/lib/openswan/ipsec.secrets.inc
XXX.XXX.XXX.XXX hq.myDynDNSDomainToMyOffice.com: PSK "mySuperSecretPassword!"
---------------------- локальная сторона, мой брандмауэр ---------------------- -----
/etc/ipsec.conf
config setup
plutodebug="none"
nat_traversal="yes"
dumpdir=/var/run/pluto/
keep_alive="60"
probe_psk="no"
plutostderrlog=/var/log/ipsec.log
# Phone Server
conn S_REF_IpsSitPhoneServe_0
authby="psk"
auto="start"
compress="no"
ecn="no"
esp="aes128-md5"
ike="aes256-md5-modp1536"
ikelifetime="7800"
keyexchange="ike"
keylife="3600"
left="hq.myDynDNSDomainToMyOffice.com"
leftid="hq.myDynDNSDomainToMyOffice.com"
leftsourceip="10.0.0.1"
leftsubnet="10.0.0.0/24"
pfs="no"
pmtu_discovery="no"
rekeymargin="540"
right="XXX.XXX.XXX.XXX"
rightid="XXX.XXX.XXX.XXX"
rightsubnet="XXX.XXX.XXX.XXX/32"
type="tunnel"
для /etc/ipsec.secrets:
# this file is managed with debconf and will contain the automatically created RSA keys
include /var/lib/openswan/ipsec.secrets.inc
hq.myDynDNSDomainToMyOffice.com XXX.XXX.XXX.XXX : PSK "mySuperSecretPassword!"
Так вы доберетесь до 99% пути. Остальной 1% зависит от вас, поскольку журналы ошибок создаются в /var/log/ipsec.log. Обратите внимание, что со стороны телефонного сервера все было сделано вручную, а вот со стороной брандмауэра откашлялся мой графический интерфейс брандмауэра. Во второй половине могут быть ненужные / избыточные биты конфигурации.
После того, как вы заставите его работать, убедитесь, что вы дважды проверили все параметры безопасности, прежде чем передавать через него что-нибудь, "достойное ipsec".
Изменить 01: Я видел, что вам нужны лучшие примеры, поэтому я публикую несколько новых файлов конфигурации, которые я только что протестировал:
---------------- телефонный сервер ipsec.conf -----------------
root@phoneServerName:/home/neil# cat /etc/ipsec.conf
# /etc/ipsec.conf - Openswan IPsec configuration file
version 2.0
config setup
plutodebug=all
klipsdebug=none
dumpdir=/var/run/pluto/
protostack=netkey
plutostderrlog=/var/log/ipsec.log
conn PSK-noNAT
type=transport
authby=secret
keyexchange=ike
ike=aes256-md5-modp1536
ikelifetime=7800s
phase2alg=aes128-md5
keylife=3600s
left=XXX.XXX.XXX.XXX
leftid=XXX.XXX.XXX.XXX
right=hq.myDynDNSDomainToMyOffice.com
rightid=hq.myDynDNSDomainToMyOffice.com
auto=add
--------------------- брандмауэр ipsec.conf -------------------------
hq:/var/sec/chroot-ipsec/etc # cat ipsec.conf
#/etc/ipsec.conf - strongSwan IPsec configuration file
config setup
#metric="0"
charonstart="no"
plutodebug="none"
uniqueids="no"
nocrsend="yes"
nat_traversal="no"
keep_alive="60"
crlcheckinterval="0"
strictcrlpolicy="no"
probe_psk="no"
conn %default
rekeyfuzz="100%"
keyingtries="0"
leftsendcert="always"
dpddelay="30"
dpdtimeout="120"
dpdaction="restart"
conn transportModeFirewallToPhoneServer
authby="psk"
auto="start"
compress="no"
ecn="no"
esp="aes128-md5"
ike="aes256-md5-modp1536"
ikelifetime="7800"
keyexchange="ike"
keylife="3600"
left="hq.myDynDNSDomainToMyOffice.com"
leftid="hq.myDynDNSDomainToMyOffice.com"
leftupdown="/usr/libexec/ipsec/updown classic"
pfs="yes"
pfsgroup="modp1536"
pmtu_discovery="no"
rekeymargin="540"
right="XXX.XXX.XXX.XXX"
rightid="XXX.XXX.XXX.XXX"
type="transport"
По сути, просто удалите все, что касается подсетей, и измените тип транспорта.
Это рабочая конфигурация. Как я узнаю, что это работает? IPTables блокирует все на телефонном сервере. Как только я подключаю IPSec-соединение, мой SIP-трафик и трафик веб-управления проходят.