我正在尝试在 Raspberry Pi 2 上设置 IPsec 网关 (strongSwan)。
Pi 已经使用私有 IP 地址在 LAN 上提供了许多服务。
我最初尝试将其转变为 IPsec 网关,只需将公共 IP 地址添加到同一接口 ( eth0
) 并在此新地址上启用 StrongSwan SA。这是可行的,在启用该pcrypt
模块后,我设法获得了约 80Mbps 的解密吞吐量,考虑到所有因素,这确实相当不错。
然后我决定尝试将 StrongSwan 的东西隔离到一个单独的网络命名空间中。我这样做了ip netns add vpn
,macvlan
在 上创建了一个设备eth0
,然后将其添加到vpn
命名空间中。然后我跑了ip netns exec vpn ipsec start
,一切又恢复正常了。
然而,pcrypt
命名空间内似乎不再活跃,吞吐量下降至约 25Mbps。我通常启用pcrypt
using crconf
,按照这条指令。当在命名空间内调用时,它不断失败并出现网络链接错误。运行strace crconf
给出了这个宝石:
socket(PF_NETLINK, SOCK_RAW, NETLINK_CRYPTO) = 3
setsockopt(3, SOL_SOCKET, SO_SNDBUF, [32768], 4) = 0
setsockopt(3, SOL_SOCKET, SO_RCVBUF, [1048576], 4) = 0
bind(3, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0
getsockname(3, {sa_family=AF_NETLINK, pid=997, groups=00000000}, [12]) = 0
send(3, "\24\0\0\0\23\0\1\3U\212\327V\0\0\0\0\0\0\0\0", 20, 0) = -1 ECONNREFUSED (Connection refused)
NETLINK_CRYPTO
因此内核拒绝从网络命名空间内部到套接字的连接。
问题:如何允许NETLINK_CRYPTO
来自我的网络命名空间的连接?