1

我很难用 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 请求。但服务器上绝对没有。

对我做错了什么有任何想法吗?

谢谢

4

0 回答 0