我很难用 IPsec 完成第一个工作配置。
我想要一个 IPsec 服务器,它与它的客户端创建一个网络,并且我希望客户端能够通过服务器相互通信。我在服务器和客户端上都使用 Strongswan,并且我将拥有一些具有其他 IPsec 实现的客户端。
问题
因此,每个客户端都可以在 10.231.0.1 访问服务器,并且服务器可以 ping 客户端。它运作良好。但客户无法相互联系。
这是我尝试从 10.231.0.3 ping 10.231.0.2 时 tcpdump 的输出
# tcpdump -n host 10.231.0.3
[..]
21:28:49.099653 ARP, Request who-has 10.231.0.2 tell 10.231.0.3, length 28
21:28:50.123649 ARP, Request who-has 10.231.0.2 tell 10.231.0.3, length 28
我想到了 farp 插件,在这里提到:https ://wiki.strongswan.org/projects/strongswan/wiki/ForwardingAndSplitTunneling但是 ARP 请求没有进入服务器,它保持在本地。
信息
服务器 ipsec.conf
config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=no
conn ikev2-vpn
auto=add
compress=no
type=tunnel
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
dpdaction=clear
dpddelay=300s
esp=aes256-sha256-modp4096!
ike=aes256-sha256-modp4096!
rekey=no
left=%any
leftid=%any
leftcert=server.crt
leftsendcert=always
leftsourceip=10.231.0.1
leftauth=pubkey
leftsubnet=10.231.0.0/16
right=%any
rightid=%any
rightauth=pubkey
rightsourceip=10.231.0.2-10.231.254.254
rightsubnet=10.231.0.0/16
客户端 ipsec.conf
config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=no
conn ikev2-vpn
auto=route
compress=no
type=tunnel
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
dpdaction=clear
dpddelay=60s
esp=aes256-sha256-modp4096!
ike=aes256-sha256-modp4096!
rekey=no
right=server.url
rightid=%any
rightauth=pubkey
rightsubnet=10.231.0.1/32
left=%defaultroute
leftid=%any
leftauth=pubkey
leftcert=client.crt
leftsendcert=always
leftsourceip=10.231.0.3
leftsubnet=10.231.0.3/32
Strongswan 和 charon 的配置文件中应该没有什么特别或相关的,但如果您认为这可能有用,我可以提供它们。
我在配置中采取了一些捷径:我正在使用 VirtualIP,但我没有使用 DHCP 插件或任何东西来分配 IP。我在客户端上手动设置 IP 地址,如下所示:
ip address add 10.231.0.3/16 dev eth0
这是客户端的路由表(通过添加IP和Strongswann为表220自动设置):
# ip route list | grep 231
10.231.0.0/16 dev eth0 proto kernel scope link src 10.231.0.3
# ip route list table 220
10.231.0.1 via 192.168.88.1 dev eth0 proto static src 10.231.0.3
我也玩过 iptables 和这条规则
iptables -t nat -I POSTROUTING -m policy --pol ipsec --dir out -j ACCEPT
在客户端和服务器上,因为我知道如果我已经设置了 MASQUERADE 规则,这可能是一个问题,但这并没有改变任何东西。
我还在客户端和服务器端通过 sysctl 设置了这些内核参数:
sysctl net.ipv4.conf.default.accept_redirects=0
sysctl net.ipv4.conf.default.send_redirects=0
sysctl net.ipv4.conf.default.rp_filter=0
sysctl net.ipv4.conf.eth0.accept_redirects=0
sysctl net.ipv4.conf.eth0.send_redirects=0
sysctl net.ipv4.conf.eth0.rp_filter=0
sysctl net.ipv4.conf.all.proxy_arp=1
sysctl net.ipv4.conf.eth0.proxy_arp=1
sysctl net.ipv4.ip_forward=1
铅 1
这可能与我在客户端配置中 /32 中声明的子网有关。起初我在 /16 中声明了子网,但我无法使用此配置连接两个客户端。第二个客户自己占据了全部流量。所以我明白我应该限制流量选择器,这就是我的做法,但也许我错了。
铅 2
这可能与我手动分配 IP 的方式以及它可能在路由表中引入的混乱有关。当我使用路由表手动分配网关(如客户端的公共 IP 作为网关)时,TCPdump 中的 ARP 消失了,我看到了 ICMP 请求。但服务器上绝对没有。
对我做错了什么有任何想法吗?
谢谢