配置 Linux 通过 ipsec 隧道路由来自内部网络的流量(基于策略)

配置 Linux 通过 ipsec 隧道路由来自内部网络的流量(基于策略)

我的公司托管云服务。我们有一个合作伙伴也托管云服务。我们想使用 ipsec / strongswan 将我们的网络与他们的网络连接起来。我们的客户应该能够使用vpn-router-server作为路由器 / vopn 网关访问目标服务器。

设置如下:

网络设置如文中所述

我需要如何配置我的客户端和vpn-router-server

答案1

笔记:

  • 我们实际上并不知道也不关心合作伙伴网络内部设置的细节。我们只知道他们的 vpn-endpoint 公共 ip ( 1.1.1.1)、他们的内部网络 ( 10.10.10.0/24) 和他们的服务器的 ip 地址(例如10.10.10.1
  • 我们的vpn-router-serverIAAS 服务器由公共云提供商托管。它有一个可直接访问的外部 IP(2.2.2.2)。它确实使用网关来访问互联网,但由于 IAAS 提供商会处理所有这些,因此我们不会将其包含在图表中。

在此示例中,我们将重点关注以下场景:

  • 我们的client1将向发送一个pingtarget 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

相关内容