iptables 根据源 IP 将某些设备转发到不同的接口

iptables 根据源 IP 将某些设备转发到不同的接口

我正在尝试进一步扩展我最近提出的一个问题这里(并得到帮助)基于本教程: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)

相关内容