Networking

通過 2 個介面路由

  • February 20, 2021

帶有 KVM 虛擬化的 VPS A 和 Ubuntu 20.04 LTS

VPN伺服器:10.29.0.0/24

帶有 KVM 虛擬化的 VPS B,帶有

來自 VPS A 的 Ubuntu 20.04 LTS VPN 客戶端:10.29.0.19

VPN 伺服器:10.8.0.0/24

我不控制 VPS A,並且作為 VPN 伺服器允許 VPN 客戶端之間的通信。

從 VPS B 本身的命令行,我可以 ping VPS A 上 VPN 伺服器的所有客戶端。

root@vpsB:~# ping 10.29.0.1
PING 10.29.0.1 (10.29.0.1) 56(84) bytes of data.
64 bytes from 10.29.0.1: icmp_seq=1 ttl=64 time=3.09 ms
64 bytes from 10.29.0.1: icmp_seq=2 ttl=64 time=3.10 ms
^C
--- 10.29.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 3.091/3.094/3.097/0.003 ms
root@vpsB:~# ping 10.29.0.5
PING 10.29.0.5 (10.29.0.5) 56(84) bytes of data.
64 bytes from 10.29.0.5: icmp_seq=1 ttl=64 time=59.8 ms
64 bytes from 10.29.0.5: icmp_seq=2 ttl=64 time=60.0 ms
^C
--- 10.29.0.5 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 59.761/59.877/59.994/0.116 ms
root@vpsB:~# ip address show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
      valid_lft forever preferred_lft forever

      valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
   link/ether 00:00:3c:a2:85:61 brd ff:ff:ff:ff:ff:ff
   inet 217.XXX.XXX.111/24 brd 217.XXX.XXX.255 scope global eth0
      valid_lft forever preferred_lft forever
   
3: tun1: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
   link/none
   inet 10.8.0.1/24 brd 10.8.0.255 scope global tun1
      valid_lft forever preferred_lft forever
   
4: tun3: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
   link/none
   inet 10.29.0.19/24 brd 10.29.0.255 scope global tun3
root@vpsB:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         217.XXX.XXX.1   0.0.0.0         UG    0      0        0 eth0
10.8.0.0        0.0.0.0         255.255.255.0   U     0      0        0 tun1
10.29.0.0       0.0.0.0         255.255.255.0   U     0      0        0 tun3
217.XXX.XXX.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0
root@vpsB:~# iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -p udp -m udp --dport 1194 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.8.0.0/24 -j ACCEPT

為了從 10.8.0.0/24 ping 到 10.29.0.0/24,我需要做什麼?

iptables規則從上到下處理。從VPS-B(您擁有的)開始,您已經擁有必須重新安排的現有 NAT 規則。為了重新排列 NAT 規則,您必須將現有規則復製到文本編輯器,然後刪除現有規則。然後以正確的順序重新添加 NAT 規則。

程序是這樣的:

查看現有的 NAT 鏈規則(刪除前):

sudo iptables -t nat -L -n --line-numbers

將規則保存到文本編輯器

要刪除現有的 NAT 規則:

sudo iptables -t nat -D POSTROUTING 1

重複上述命令,直到刪除所有 NAT 規則。然後重新添加 NAT 規則。

確保首先遵循以下規則(然後將遵循其餘的 NAT 規則):

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -d 10.29.0.0/24 -o tun3 -j MASQUERADE

確保規則順序正確:

sudo iptables -t nat -L -n --line-numbers

VPS-B 已經在互連10.8.0.0/2410.29.0.0/24因此在此伺服器上不需要進一步的路由語句。

從使用 VPS-B 作為其 VPN 伺服器的 VPN 客戶端,告訴他們使用 VPN 伺服器 ( 10.8.0.1) 作為子網的下一個躍點10.29.0.0/24

sudo ip route add 10.29.0.0/24 via 10.8.0.1

如果一切正常,請考慮將 iptables 規則保存在 VPS-B 伺服器上。指南在這裡

引用自:https://unix.stackexchange.com/questions/622873