我正在尝试进一步扩展我最近提出的一个问题这里(并得到帮助)基于本教程:https://www.instructables.com/Raspberry-Pi-VPN-Gateway/#step5。
使用 Raspberry PI 作为 VPN 盒,我应用了以下 ip 表通过 VPN 接口 (nordlynx) 路由流量,源 IP 地址为192.168.4.26,然后退出相同的界面,效果非常好。
目前我使用 1 个接口用于输入/输出(eth0),VPN 由 NordVPN 提供(nordlynx 是 vpn 接口的名称)。
sudo iptables -t nat -A POSTROUTING -o nordlynx -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o nordlynx -s 192.168.4.26 -j ACCEPT
sudo iptables -A FORWARD -i nordlynx -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -i eth0 -p icmp -j ACCEPT
sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -P FORWARD DROP
sudo iptables -P INPUT DROP
我的问题是任何未通过 Nordlynx 转发的 IP 地址都不再有效。我尝试通过转发另一个设备IP地址来测试:192.168.4.51退出 eth0 接口,这样就不必通过 VPN,但它不起作用:
sudo iptables -A FORWARD -i eth0 -o eth0 -s 192.168.4.51 -j ACCEPT
sudo iptables -A INPUT -i eth0 -s 192.168.4.51 -j ACCEPT
我明白也许我应该用iproute2
这个?我已经尝试添加这些 ip 规则和路由但仍然没有:
ip rule add from 192.168.4.51 table 200
ip route add default via 192.168.4.1 dev eth0 table 200
ip route flush cache
这是因为无论 ip 规则/路由如何,它都会被 iptables 规则阻止吗?我在这里有点困惑,所以任何关于我做错了什么的指示都会有很大的帮助。
编辑:
+--------------+
| |
| ISP MODEM |
| |
+--------------+
|
|
+------------------------------------+
| |
| MAIN ROUTER |
| 192.168.4.1 |
| |
+------------------------------------+
| | |
| | |
+----------------+ +--------------+ +---------------+
| | | | | |
| MACBOOK 1 | | RASPBERRY Pi | | MACBOOK 2 |
| 192.168.4.26 | | 192.168.4.63 | | 192.168.4.51 |
| |---| |---| |
+----------------+ +--------------+ +---------------+
--- ---
\--- ---/
\--- ---/
\--- ---/
\-- --/
MANUALLY SET ROUTER ADDRESS OF DEVICES TO RASPBERRY Pi
(192.168.4.63)
pi@raspberrypi:~ $ ip rule show
0: from all lookup local
32762: from 192.168.4.51 lookup vpnbypass
32763: from all lookup main suppress_prefixlength 0
32764: not from all fwmark 0xca6c lookup 51820
32765: from all to 192.154.196.27 lookup main
32766: from all lookup main
32767: from all lookup default
pi@raspberrypi:~ $ cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
200 vpnbypass
VPN 启动后,NordVPN for Linux 应用程序(wireguard 协议)将设置以下 IPtable:
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-A INPUT -s 192.154.196.27/32 -i wlan0 -j ACCEPT
-A INPUT -s 192.154.196.27/32 -i eth0 -j ACCEPT
-A INPUT -i wlan0 -p udp -m udp --dport 22 -j ACCEPT
-A INPUT -i wlan0 -p udp -m udp --sport 22 -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --dport 22 -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --sport 22 -j ACCEPT
-A INPUT -i wlan0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i wlan0 -p tcp -m tcp --sport 22 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --sport 22 -j ACCEPT
-A INPUT -i wlan0 -j DROP
-A INPUT -i eth0 -j DROP
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -p icmp -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o nordlynx -j ACCEPT
-A FORWARD -i nordlynx -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -d 192.154.196.27/32 -o wlan0 -j ACCEPT
-A OUTPUT -d 192.154.196.27/32 -o eth0 -j ACCEPT
-A OUTPUT -o wlan0 -p udp -m udp --dport 22 -j ACCEPT
-A OUTPUT -o wlan0 -p udp -m udp --sport 22 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m udp --dport 22 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m udp --sport 22 -j ACCEPT
-A OUTPUT -o wlan0 -p tcp -m tcp --dport 22 -j ACCEPT
-A OUTPUT -o wlan0 -p tcp -m tcp --sport 22 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --sport 22 -j ACCEPT
-A OUTPUT -o wlan0 -j DROP
-A OUTPUT -o eth0 -j DROP
答案1
您能解释一下您的网络拓扑吗? 192.168.4.26 是您在 RPi 上的本地 IP 地址,192.168.4.51 是 RPi 后面的另一台 PC?
请复制并粘贴此命令的输出:
ip rule show
cat /etc/iproute2/rt_tables
ip route show table xyz (for every table xyz form ip rule show command above or table name from rt_tables file)