首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iptables将一些设备转发到基于源IP的不同接口

iptables将一些设备转发到基于源IP的不同接口
EN

Unix & Linux用户
提问于 2020-11-25 09:36:27
回答 1查看 904关注 0票数 2

我试图在本教程的基础上进一步扩展我最近向这里提出的一个问题(并得到了帮助):https://www.instructables.com/Raspberry-Pi-VPN-Gateway/#step5

使用Raspberry PI作为VPN盒,我应用了以下ip表来通过源IP地址192.168.4.26的VPN接口(nordlynx)路由通信量,并退出相同的接口,这是非常完美的。

目前,我使用一个接口进行输入/输出(eth0),而VPN由NordVPN提供(nordlynx是vpn接口的名称)。

代码语言:javascript
运行
复制
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

我的问题是,任何IP地址,如果没有通过nordlynx转发,就不再工作了。我试图通过转发另一个设备IP地址来进行测试:192.168.4.51从eth0接口返回,这样它就不必通过VPN,但它不能工作:

代码语言:javascript
运行
复制
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规则和路由,但仍然没有:

代码语言:javascript
运行
复制
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规则阻塞了吗?我在这里有点困惑,所以任何关于我做错了什么的建议都会有很大的帮助。

编辑:

代码语言:javascript
运行
复制
                                  +--------------+                               
                                  |              |                               
                                  |  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)                                 
代码语言:javascript
运行
复制
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
代码语言:javascript
运行
复制
pi@raspberrypi:~ $ cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0   unspec
#
# local
#
#1  inr.ruhep

200 vpnbypass

一旦启动VPN,下面的IPtables将由NordVPN为Linux应用程序(wireguard协议)设置:

代码语言:javascript
运行
复制
-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
EN

回答 1

Unix & Linux用户

发布于 2020-11-25 15:02:34

您能解释一下您的网络拓扑吗? 192.168.4.26是您在RPi上的本地ip地址,192.168.4.51是RPi后面的另一个PC?

请复制和粘贴这些命令的输出:

代码语言:javascript
运行
复制
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)
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/621478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档