我有一台树莓派,计划在其上运行 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
是“行号”,用于确保规则的顺序正确