在两台主机之间的 LAN 上设置 IPSEC(OpenBSD)

在两台主机之间的 LAN 上设置 IPSEC(OpenBSD)

尝试在 LAN 上的两个主机之间使用 IPSEC。无需 VPN

使用 OpenBSD 5.8(在 VirtualBox 中)。我更喜欢使用 OpenBSD 内置的 IPSEC 和密钥交换支持,而不是第三方支持。

两台主机:(10.0.2.10主机“A”)和10.0.2.11(主机“B”)

在尝试设置 IPSEC 之前,他们可以互相 ping/ssh。

更新:我认为 OpenIKED(IKE v2)可能不支持transport模式,所以我也会接受 isakmp(IKE v1)的答案

将 A 复制/etc/iked/local.pub到 B/etc/iked/pubkeys/ipv4/10.0.2.10
将 B 复制/etc/iked/local.pub到 A/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 守护进程已启动。如果我将公钥重命名为任何名称,仍然可以互相 ping 通,因此 IPSEC 似乎不起作用。

  1. 我还需要配置什么?
  2. 是否有 IPSEC 和 iked 的日志?如果有,我在哪里可以找到它们?
  3. 如何判断配置后的 IPSEC 是否正常工作,而无需查看机器之间的数据包?从 B ping 到 A,在 A 上运行 tcpdump。应该在 tcpdump 中看到“esp”和“spi”

更新:我让 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

像个书呆子一样回答我自己的问题

问题 1. OpenIKED (IKEv2) 不支持传输模式,因此您只能将其用于 VPN,而不能在 LAN 上使用。使用isakmpd(IKEv1)

问题 2. 的文档ipsec.confauthenc值有默认值,但你似乎无论如何都需要设置它们

我还需要配置什么?

您需要设置正确的rc.d标志isakmpd(见下文)

是否有 IPSEC 和 iked 的日志?如果有,我在哪里可以找到它们?

日志位于/var/log/daemon

如何判断配置后的 IPSEC 是否正常工作,而无需查看机器之间的数据包?

在 B 上运行tcpdump host A,在 A 上运行ping B。您希望在 tcpdump 输出中esp看到spi

设置:

主机 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 [email protected]:/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 [email protected]:/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

答案2

所以我最近确实运行了类似的东西 - 只是一个地址和我的网络之间的 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 中创建的错误日志。请注意,电话服务器端是手动完成的,但防火墙端是我的防火墙 GUI 完成的。后半部分可能有一些不必要/多余的配置位。

使其正常工作后,请确保在传递任何“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 流量和 Web 管理流量就会通过。

相关内容