答案1
笔记:
- 我们实际上并不知道也不关心合作伙伴网络内部设置的细节。我们只知道他们的 vpn-endpoint 公共 ip (
1.1.1.1
)、他们的内部网络 (10.10.10.0/24
) 和他们的服务器的 ip 地址(例如10.10.10.1
) - 我们的
vpn-router-server
IAAS 服务器由公共云提供商托管。它有一个可直接访问的外部 IP(2.2.2.2
)。它确实使用网关来访问互联网,但由于 IAAS 提供商会处理所有这些,因此我们不会将其包含在图表中。
在此示例中,我们将重点关注以下场景:
- 我们的
client1
将向发送一个ping
。target server1
其他客户端和目标服务器的工作方式完全相同,只是它们的 IP 不同。
在client1
:
# tell the client to send all traffic for the partner network to the vpn-router-server
$ route add -net 10.10.10.0 gw 192.168.1.1
开启vpn-router-server
:/etc/ipsec.conf
-配置
config setup
uniqueids = yes
conn con1
aggressive = no
fragmentation = yes
keyexchange = ikev2
mobike = yes
reauth = yes
rekey = yes
forceencaps = no
installpolicy = yes
left = %any
leftid = 2.2.2.2
leftsubnet = 192.168.1.0/24
leftauth = psk
right = 1.1.1.1
rightid = 1.1.1.1
rightsubnet = 10.10.10.0/24
rightauth = psk
ikelifetime = 86400s
lifetime = 3600s
ike = aes256gcm16-sha512-ecp521!
reqid = 1000
esp = aes256-sha512-ecp521,aes256gcm16-sha512-ecp521,3des-sha512-ecp521,cast128-sha512-ecp521!
auto = start
设置iptable
规则:
$ iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 ! -p esp -j SNAT --to-source 192.168.1.1
-s 192.168.1.0/24
仅对来自内部网络的流量应用 SNAT-o eth0
仅对通过外部接口 eth0 传出的流量应用 SNAT! -p esp
不要对 DSP / ipsec 流量本身进行 SNAT。这是重要的部分,我之前忽略了这一部分。-j SNAT
对流量进行 SNAT--to-source 192.168.1.1
使用vpn-router-server
内部 IP 作为 SNAT 数据包的源 IP
现在应该client1
能够 ping 通target server1
:
$ ping 10.10.10.1
vpn-router-server
您可以使用以下方法分析正在发生的事情tcpdump
:
$ tcpdump -n -i eth0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
07:10:37.150680 IP 10.10.10.1 > 192.168.1.1: ICMP echo reply, id 7642, seq 1, length 64
07:10:38.152097 IP 10.10.10.1 > 192.168.1.1: ICMP echo reply, id 7642, seq 2, length 64
07:10:39.153237 IP 10.10.10.1 > 192.168.1.1: ICMP echo reply, id 7642, seq 3, length 64
07:10:40.153997 IP 10.10.10.1 > 192.168.1.1: ICMP echo reply, id 7642, seq 4, length 64
07:10:41.154766 IP 10.10.10.1 > 192.168.1.1: ICMP echo reply, id 7642, seq 5, length 64
07:10:42.155937 IP 10.10.10.1 > 192.168.1.1: ICMP echo reply, id 7642, seq 6, length 64
$ tcpdump -n -i eth1 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
07:10:46.156162 IP 192.168.1.101 > 10.10.10.1: ICMP echo request, id 7642, seq 10, length 64
07:10:46.161079 IP 10.10.10.1 > 192.168.1.101: ICMP echo reply, id 7642, seq 10, length 64
07:10:47.157485 IP 192.168.1.101 > 10.10.10.1: ICMP echo request, id 7642, seq 11, length 64
07:10:47.162435 IP 10.10.10.1 > 192.168.1.101: ICMP echo reply, id 7642, seq 11, length 64
07:10:48.158920 IP 192.168.1.101 > 10.10.10.1: ICMP echo request, id 7642, seq 12, length 64
07:10:48.163772 IP 10.10.10.1 > 192.168.1.101: ICMP echo reply, id 7642, seq 12, length 64
07:10:49.160364 IP 192.168.1.101 > 10.10.10.1: ICMP echo request, id 7642, seq 13, length 64
07:10:49.165322 IP 10.10.10.1 > 192.168.1.101: ICMP echo reply, id 7642, seq 13, length 64