Vpn

如何設置 VPN 以訪問特定子網?

  • December 14, 2019

我想設置一個點到站點 VPN,它只用於訪問一組特定的子網,這樣我就可以通過 VPN 訪問服務,但不需要通過它路由所有流量。

在我的測試設置中,我有三台伺服器,其中一台 ( fra1-02) 正在執行 StrongSwan/IPSec:

         +-----------------+     +-----------------+
         |    client(s)    |---->|    internet     |
         +-----------------+     +-----------------+
                  |
                  v
         +-----------------+
         |  fra1-02 (vpn)  |
         +-----------------+
                  |
        +---------+---------+
        |                   |
        v                   v
+-----------------+ +-----------------+
|     fra1-01     | |     fra1-03     |
+-----------------+ +-----------------+

我希望客戶端能夠正常連接到 Internet,但是對於三個子網(特別是分配給三個伺服器的子網),流量應該通過 VPN。

三台伺服器具有以下子網:

  1. 2a03:b0c0:3:e0::489:d000/124
  2. 2a03:b0c0:3:e0::493:1000/124
  3. 2a03:b0c0:3:e0::493:2000/124

我已將 IPSec 配置為從fd00:0::0/32

這是我的ipsec.conf

config setup
   uniqueids=no
conn ikev2-vpn
   auto=add
   compress=no
   type=tunnel
   keyexchange=ikev2
   fragmentation=yes
   forceencaps=yes
   dpdaction=clear
   dpddelay=300s
   rekey=no
   left=%any
   leftid=@{{ leftid }}
   leftcert=cert.pem
   leftsendcert=always
   leftsubnet=2a03:b0c0:3:e0::489:d000/124,2a03:b0c0:3:e0::493:1000/124,2a03:b0c0:3:e0::493:2000/124
   right=%any
   rightid=%any
   rightauth=eap-mschapv2
   rightsourceip=fd00:0::0/32
   rightdns={{ rightdns }}
   rightsendcert=never
   eap_identity=%identity

{{ variables }}將由 Ansible 填寫)。

我沒有配置任何路由或其他任何東西。

當我從筆記型電腦連接到 VPN 時,我仍然可以 ping fra1-02vpn 主機,並且源地址現在是 IPSec 分配的一個,而不是我筆記型電腦的公共地址,但其他兩台主機根本無法訪問。

我也將此添加到/etc/sysctl.conf

net.ipv6.conf.all.forwarding=1

這些是我筆記型電腦上的(部分)輸出netstat -rn(看起來完全符合我的預期):

default                         fd00::    UGcI     ipsec0
2a03:b0c0:3:e0::489:d000/124    fd00::    UGSc     ipsec0
2a03:b0c0:3:e0::493:1000/124    fd00::    UGSc     ipsec0
2a03:b0c0:3:e0::493:2000/124    fd00::    UGSc     ipsec0
...

VPN伺服器上的路由表是這樣的:

root@fra1-02:~# ip -6 route list
::1 dev lo proto kernel metric 256 pref medium
2a03:b0c0:3:e0::/64 dev eth0 proto kernel metric 256 pref medium
fe80::/64 dev eth1 proto kernel metric 256 pref medium
fe80::/64 dev eth0 proto kernel metric 256 pref medium
default via 2a03:b0c0:3:e0::1 dev eth0 proto static metric 1024 pref medium

如何設置它以便流量通過 VPNfra1-01fra1-03通過 VPN 路由?

我已經安裝netfilter-persistent並添加了以下內容/etc/iptables/rules.v6

*nat
-A POSTROUTING -s fd00::/32 -o eth0 -j MASQUERADE
COMMIT

現在一切都很好。

引用自:https://serverfault.com/questions/995423