我有以下的网络拓扑,我已尽力进行说明,所以请原谅我糟糕的绘画技巧。
我希望能够从10.0.0.0/24
网络进行通信,192.168.1.0/28
因为我想设置一个日志机作为在我的 LAN 上运行的虚拟机,另外还有一些其他用途。
我可以从 192.168.1.0/28 网络访问我的防火墙,但无法执行反向操作。
我知道基于 BusyBox 的华硕路由器必须双向存在路由,但我总是无法添加路由。
以下是路由表:
Asus:
/home/root # ip r s
default via 192.168.0.2 dev eth2.2 metric 1
127.0.0.0/8 dev lo scope link
192.168.0.0/24 dev eth2.2 proto kernel scope link src 192.168.0.3
192.168.1.0/28 dev br0 proto kernel scope link src 192.168.1.1
Firewall:
admin@piwall:~$ ip r s
default via 10.0.0.1 dev eth0 metric 202
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.2 metric 202
169.254.0.0/16 dev eth1 proto kernel scope link src 169.254.51.49 metric 203
192.168.0.0/24 dev eth1 proto kernel scope link src 192.168.0.2
192.168.1.0/28 via 192.168.0.2 dev eth1
有人可以指导我如何正确添加路线来完成我的任务并解释一下,我将不胜感激。
谢谢!
答案1
防火墙上有一条不正确的路由:
192.168.1.0/28 via 192.168.0.2 dev eth1
应改为:
192.168.1.0/28 via 192.168.0.3 dev eth1
换句话说,通过关键字位于要建立连接的机器(本例中是 Asus 路由器)的 IP 地址之前。您使用的是与连接开始位置相同的机器的 IP 地址。
为了使其工作,还有三个其他条件,其中第一个条件与您无关,但我向所有将普通电脑配置为路由器的人提及它:
通过取消注释该行来启用 IPv4 转发
#net.ipv4.ip_forward=1
在文件中/etc/sysctl.conf,然后强制使用
sudo sysctl -p
。这与您无关,因为您的华硕路由器已经作为路由器运行,因此一定此选项已正确配置。
确保您的防火墙规则在华硕路由器上允许连接流动向后。路由器还通过丢弃直接通信尝试来保护其 LAN 内的机器,除非端口转发已启用。但这对您来说太严格了,因为您希望防火墙对您的 LAN 进行无限制的访问。因此,您将需要以下两条规则:
iptables -a INPUT -s 192.168.0.2 -d 192.168.1.0/24 -j ACCEPT iptables -a FORWARD -s 192.168.0.2 -d 192.168.1.0/24 -j ACCEPT
这两条规则接受来自以下地址的通信(第一条进入路由器,第二条将其传输到内部接口):仅有的Pi 机器(出于明显的安全原因),任何您的 LAN 中的 PC,无论使用哪个端口。这比仅允许某些端口转发更为广泛。
您的路由器将执行 NAT,这意味着所有传出的数据包都将被重写,就好像它们来自华硕路由器的外部接口,即 IP 地址为 192.168.0.3 的接口。这意味着所有回复到 Pi 防火墙的数据包似乎都来自与初始连接地址不同的 IP 地址,因此出于明显的安全原因,它们将被 Pi 防火墙丢弃(这种情况模仿了中间人攻击)。
为了解决这个问题,你最好暂停华硕的 NAT仅有的对于发往 Pi 防火墙的数据包,如下所示:
iptables -t nat -A POSTROUTING -d 192.168.1.2 -j ACCEPT
为了使它工作,你需要确保(通过目视检查
iptables -t nat -L -n -v
)上面列出的规则前以下规则
iptables -t nat -A POSTROUTING -j MASQUERADE
原因是iptables按顺序应用规则,直到找到第一个适用的规则,然后检查所有后续规则不是执行。在这种情况下,确保规则按此顺序排列可确保发往 Pi 防火墙的数据包将不是被重写。
答案2
您的路由表是正确的——更可能的是,华硕路由器作为家庭 WAN 网关,启用了防火墙,阻止了所有传入连接。看看您是否可以禁用它。
(如果 NAT 功能处于活动状态,您也应该禁用它。这可能不是这里的问题,但在同一个 LAN 中完全没有必要进行两次 NAT。)