我已经与远程主机建立了 IPsec over GRE 连接,两者都是网络BSD基于 6.1。“客户端”通过 400Mbps 光纤连接连接到互联网。“服务器”位于 10Gbps 网络上。两台机器都具有 1Gbps NIC,运行正常,这意味着它们在 IPsec 隧道外传输数据时都达到了链接速度限制。通过隧道进行传输时,速度会下降 5 到 10 倍:
直接连接:
/dev/null 27%[====> ] 503.19M 45.3MB/s eta 83s
IPsec 连接:
/dev/null 2%[ ] 47.76M 6.05MB/s eta 5m 3s
隧道设置方式如下:
在服务器上,这是一个NetBSD 社区运行于debian/amd64 dom0:
$ cat /etc/ifconfig.xennet0 # 服务器接口 向上 inet 192.168.1.2 网络掩码 255.255.255.0 inet 172.16.1.1 网络掩码 0xfffffffc 别名 $ cat /etc/ifconfig.gre0 创造 隧道 172.16.1.1 172.16.1.2 向上 inet 172.16.1.5 172.16.1.6 网络掩码 255.255.255.252
IPsec 流量通过 NAT 规则从 dom0 的公共 IP 转发到 domU 的xennet0
接口:iptables
-A PREROUTING -i eth0 -p udp -m udp --dport 500 -j DNAT --to-destination 192.168.1.2:500 -A PREROUTING -i eth0 -p esp -j DNAT --到目的地 192.168.1.2 -A PREROUTING -i eth0 -p ah -j DNAT --到目的地 192.168.1.2
在客户端上:
$ cat /etc/ifconfig.vlan8 # 客户端公共接口 创造 VLAN 8 VLANIF RE0 dhcpcd -i $int inet 172.16.1.2 网络掩码 0xfffffffc 别名 $ cat /etc/ifconfig.gre1 创造 隧道 172.16.1.2 172.16.1.1 向上 inet 172.16.1.6 172.16.1.5 网络掩码 255.255.255.252
在racoon
方面,我甚至尝试了各种哈希/加密算法组合,enc_null
但实际上没有任何变化,传输速度仍然停留在最高 6MB/s。
远程节点.public.ip { exchange_mode主要; 生存时间28800秒; 提议 { 加密算法 blowfish; 哈希算法sha1; 身份验证方法预共享密钥; dh_组 2; } 生成策略关闭; } sainfo 地址 172.16.1.1/30 任意 地址 172.16.1.2/30 任意 { pfs_组 2; 加密算法 blowfish; 身份验证算法hmac_sha1; 压缩算法放气; 生命周期3600秒; }
在客户端上:
远程办公室.public.ip { exchange_mode主要; 生存时间28800秒; 提议 { 加密算法 blowfish; 哈希算法sha1; 身份验证方法预共享密钥; dh_组 2; } 生成策略关闭; } sainfo 地址 172.16.1.2/30 任意 地址 172.16.1.1/30 任意 { pfs_组 2; 加密算法 blowfish; 身份验证算法hmac_sha1; 压缩算法放气; 生命周期3600秒; }
隧道建立没有问题,这里唯一的问题是传输中断。同样,当从服务器传输到客户端时,如果没有隧道,速度是最佳的,但会出现中断仅有的通过 IPsec。
两台机器都是基于英特尔的 CPU,运行速度为 2+GHz,内存充足,并且除了转发/NAT 之外的其他任何操作所消耗的 CPU 时间很少。
有人目睹过这种行为吗?知道可以进一步观察哪些地方吗?
谢谢,
答案1
如果您没有调整 MTU,您可能会遇到后碎片问题(加密后发生碎片),此文档对此进行了很好的解释:http://www.cisco.com/c/en/us/td/docs/interfaces_modules/services_modules/vspa/configuration/guide/ivmsw_book/ivmvpnb.html#wp2047965
您应该尝试将隧道内的 MTU 减少 82 字节(GRE + IPSec 标头)。