IPTables 将来自端口 + 子网掩码的流量转发到另一个端口

IPTables 将来自端口 + 子网掩码的流量转发到另一个端口

我有一台树莓派,计划在其上运行 2 个 DNS 服务器,两个都是权威的,一个在端口 53 上,一个在端口 54 上。我想要的是除了部分流量之外的所有流量都转到第一个服务器,然后所有具有特定 IP 的流量,比如说192.168.1.0/16转到第二个服务器(它会将找不到的任何 DNS 条目转发到第一个服务器)。

目前正在 Ubuntu VM 上进行测试,因为通过这种方式编辑文件更容易一些。

我已经找到了一些关于这个主题的材料,但对我来说毫无意义(比如),而且有些选项似乎对我来说不可用。我对 iptables 一点也不熟悉,所以大部分内容对我来说都像是胡言乱语。

我正在寻找的是如果流量来自某些 IP 地址,则将其从端口 A 重定向到端口 B,以及有关命令或配置实际执行的操作的一些信息。


更新:

我有尝试过创建一些规则,我不知道我在做什么,也不知道为什么它不起作用。这些是命令:

iptables -t nat -A PREROUTING -s 192.168.1.0/16 -p udp --dport 53 -j DNAT --to-destination 127.0.0.1:53
iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to-destination 127.0.0.1:54
iptables -t nat -A PREROUTING -s 192.168.0.0/16 -p tcp --dport 53 -j DNAT --to-destination 127.0.0.1:53
iptables -t nat -A PREROUTING -p tcp --dport 53 -j DNAT --to-destination 127.0.0.1:54

结果如下:

root@Gelunox-Ubuntu-VM:~# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       udp  --  192.168.0.0/16       anywhere             udp dpt:domain to:127.0.0.1:53
DNAT       udp  --  anywhere             anywhere             udp dpt:domain to:127.0.0.1:54
DNAT       tcp  --  192.168.0.0/16       anywhere             tcp dpt:domain to:127.0.0.1:53
DNAT       tcp  --  anywhere             anywhere             tcp dpt:domain to:127.0.0.1:54

答案1

经过进一步的思考后我得到了这个答案:

iptables -t nat -I PREROUTING 1 --source 192.168.1.0/24 -p udp --dport 53 -j REDIRECT --to-ports 53
iptables -t nat -I PREROUTING 2 --source 192.168.1.0/24 -p tcp --dport 53 -j REDIRECT --to-ports 53
iptables -t nat -I PREROUTING 3 --source 0/0 -p udp --dport 53 -j REDIRECT --to-ports 54
iptables -t nat -I PREROUTING 4 --source 0/0 -p tcp --dport 53 -j REDIRECT --to-ports 54

据我所知,这里发生的情况是,端口 53 上的所有传入流量首先与 192.168.1.0/24 匹配,如果匹配则停留在端口 53 上,如果不匹配,它将被重定向到端口 54。

后面的数字PREROUTING是“行号”,用于确保规则的顺序正确

相关内容