我有两台服务器建立 IPSec VPN 作为站点到端设置。我在 Ubuntu 16.04 上为两台服务器使用 StrongSwan,VPN 本身可以正常工作。可能有点特别的是,每个网关后面的子网都是虚拟的,就像我创建了一个虚拟网络适配器一样eth0:0
。
auto eth0
iface eth0 inet static
address <PublicIP-A>
... etc
auto eth0:0
iface eth0:0 inet static
address 192.168.6.1
netmask 255.255.255.0
broadcast 192.168.6.255
(第二台服务器拥有192.168.6.0/24
网络和 PublicIP-B,其中 PublicIP-A 和 -B 当然被真实且有效的 IP 地址所取代。)
使用虚拟网络的原因是我想通过 IPSec VPN 隧道连接到其中一台服务器,并使用该隧道进行 SSH/FTP 传输通信。为了能够通过 SSH/FTP 连接到服务器或对其进行 ping,我发现我需要这个虚拟网络。(在早期的测试中发现,使用主机到站点 VPN 配置可以正常工作;不幸的是,随着我的站点到站点设置,这种情况发生了变化。)虚拟网络是正确的方法吗?还有更好的方法吗?
我的/etc/ipsec.conf
:
config setup
# strictcrlpolicy=yes
# uniqueids = no
conn %default
ikelifetime=60m
keylife=20m
rekeymargin=3m
keyingtries=1
authby=secret
keyexchange=ike
conn net-net
right=<PublicIP-A>
rightsubnet=192.168.6.0/24
left=<PublicIP-B>
leftsubnet=192.168.5.0/24
auto=add
当我traceroute
使用服务器 B 的虚拟网络地址 192.168.5.1 时,它会尝试通过互联网而不是隧道,然后就会卡住...因此,我尝试使用各种组合的方法设置路由 - 但成功率非常有限:
ip route add 192.168.5.0/24 via 192.168.6.1 dev eth0 src PublicIP-A table 220
我还尝试了一些来自 StrongSwan 文档的 iptables 设置(https://www.strongswan.org/testing/testresults/ikev2/net2net-psk/),但未能运行它。
我希望这个设置对那些能帮助我弄清楚如何设置路由以告诉到其他服务器的虚拟本地网络的流量通过隧道的人来说是有意义的。如果需要更多信息 - 请不要犹豫...
提前致谢!
编辑 2016-08-26
考虑到@ecdsa 的评论,我不需要站点到站点设置。站点到主机就可以了。
traceroute
输出
traceroute to PublicIPServer-B (PublicIPServer-B), 30 hops max, 60 byte packets
1 PublicIPServer-B (PublicIPServer-B) 1.467 ms 1.298 ms 1.229 ms
而如果没有隧道,就会弹出其他网关。
这有助于从服务器 B 连接到主机 A - SSH 可以工作 - 但另一个方向却无法工作。稍后的真实世界设置将是站点到主机,其中网关服务器 B 后面有一个真实的网络。
摘自此处https://www.strongswan.org/testing/testresults/ikev2/host2host-cert/,我尝试添加一条路线
ip route add PublicIPServer-B via PublicIPServer-B src PublicIPHost-A
// and
ip route add 192.168.5.0/24 via PublicIPServer-B src PublicIPHost-A
这会导致RTNETLINK answers: Network is unreachable
错误。不确定我是否需要主机到站点方向的通信,但为了安全起见还是不错的。(特别是因为我不能 100% 确定答案是否traceroute
通过隧道发送)
关于如何实现最后一点,您有什么想法吗?
编辑 2016-08-26 (第二次)
在这种情况下,strongSwan 显然确实设置了路由。traceroute
-ing 和ping
-ing 远程子网(如 Server-B 的远程子网 IP 地址 192.168.5.1)有效。
是的,我想这个问题现在解决了!
欢呼@ecdsa