Networking
通過 2 個介面路由
帶有 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/24
,10.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 伺服器上。指南在這裡