向资深软路由玩家提问,关于 lede 项目 DNS 的设置

216 天前
 Jinnrry

背景:基于最新 lede 代码编译,开启 SSR-Plus

我登录路由器,ps 可以看到

dns2tcp -L 127.0.0.1#5335 -R 8.8.8.8#53
chinadns-ng -l 5333 -4 china -p 3 -c 114.114.114.114 -t 127.0.0.1#5335 -N -f -r
dnsmasq -C /var/etc/dnsmasq.conf.cfg01411c

dnsmasq 的上游服务器配置为resolv-file=/tmp/resolv.conf.d/resolv.conf.auto

该文件内容: (均为 Wan 下发的 DNS 地址)

# Interface wan
nameserver xxxxxxxxxxxxxxx
nameserverxxxxxxxxxxxxxxx
# Interface wan6
nameserver xxxxxxxxxxxxxxx
# Interface wan_6
nameserver xxxxxxxxxxxxxxx
nameserver xxxxxxxxxxxxxxx

这里 chinadns-ng 和 dns2tcp 我能理解,chinadns-ng 将国内 dns 查询分流到 114 ,将海外 dns 查询转到 dns2tcp ,然后 dns2tcp 又去 8.8.8.8 查询 DNS 记录。

但是!这个 dnsmasq 我就不理解了,53 端口是 dnsmasq 占用的,我电脑默认应该是访问路由器 53 端口查 DNS ,也就是访问 dnsmasq 的 DNS 服务,这样一来,chinadns-ng 的服务不就相当于没用上吗? dnsmasq 上游都是 wan 下发的 DNS 服务器,那这样是如何防止 DNS 污染呢?

但最终结果好像又不是这样的,实际使用好像又没有出现 DNS 污染,那这样的话 dnsmasq 究竟在哪配置把流量导入 chinadns-ng 的呢?我研究了非常久,dnsmasq 明明就是使用的 wan 下发 DNS 呀,没有其他的上游设置了

2967 次点击
所在节点    DNS
34 条回复
Puteulanus
216 天前
@Jinnrry SSR-PLUS 我不清楚,像 Passwall ( xray ?)默认情况下解析的 IP 是没用的,可能只是用作“走代理还是直连”的判定,实际被判定成走代理的话请求好像是会被发到代理服务器再去解析的,我在本地 hosts 里把谷歌域名指向 1.1.1.1 或者随手乱输的 IP ,它都能照常上
kursk
216 天前
@Jinnrry 那就不用 ipv6

gost,v2ray ,现在能用的工具很多。gost 是肯定可以在 ARM 上用的,就是要路由器的内存大点
kursk
216 天前
说错了

iptables -L 这个命令默认查询的是 filter 表,但一般在 nat 表,所以命令应该这么写

iptables -t nat -L -v -n
Jinnrry
216 天前
@kursk 感谢回复,我也是 firewell4 ,nftables 和 iptables 我确实都不怎么熟悉,我照着你的思路研究一下先
Jinnrry
216 天前
@kursk 好的,感谢
yyzh
216 天前
@kursk LEDE 也是用的 FW4 的,都没差 https://github.com/coolsnowwolf/lede/commits/master/
Jinnrry
216 天前
Chain SS_SPEC_WAN_FW (4 references)
pkts bytes target prot opt in out source destination
49 2940 REDIRECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 22,53,587,465,995,993,143,80,443,853,9418 redir ports 1234

通过 iptables -t nat -L -v -n 可以找到这样一条转发规则,我 ssr-plus 里面目前设置的仅常用端口代理,这时通过 iptables 把这些常用端口的流量转发到了 1234 端口,1234 端口是 xray 的端口,这样就把流量都给 xray 代理了


@kursk #23 大佬,再请教下,我目前设置的是非国内 ip 代理,那这个 ip 分流又是在哪做的呢,我检查了 xray 的配置文件,发现 xray 配置文件里面没有路由字段,说明 xray 仅仅是把 input 流量转发到 output 里面去,并没有利用 xray 的分流能力。

除此之外,naive 客户端应该是没有分流能力的,因此 ssr-plus 肯定不是利用各个代理程序做的分流,所以这个 ip 分流策略又是在哪呢

这个 iptable 规则看起来,也没有什么分流设置呢,而且我看了 1234 端口,确实是 xray 处理了,这中间应该也没其他分流程序了
kursk
215 天前
@Jinnrry 如果策略是“非国内 ip 代理”,那么肯定有针对目标地址的转发规则,你现在找到这个是针对目标端口的转发,不是这个

你把 iptables -t nat -L -v -n 的结果全部贴出来看看
kursk
215 天前
不过我有点不明白,如果你的路由器使用 FW4 ,iptables 命令应该不能执行吧?如果 iptables 命令能执行成功,那就应该是 FW3 啊
xiaoranj
215 天前
直接用 nextdns.io
Jinnrry
215 天前
@kursk #28

Chain PREROUTING (policy ACCEPT 7861 packets, 601K bytes)
pkts bytes target prot opt in out source destination
3187 191K SS_SPEC_WAN_AC tcp -- br-lan * 0.0.0.0/0 0.0.0.0/0 /* _SS_SPEC_RULE_ */
693K 54M prerouting_rule all -- * * 0.0.0.0/0 0.0.0.0/0 /* !fw3: Custom prerouting rule chain */
692K 53M zone_lan_prerouting all -- br-lan * 0.0.0.0/0 0.0.0.0/0 /* !fw3 */
838 245K zone_wan_prerouting all -- pppoe-wan * 0.0.0.0/0 0.0.0.0/0 /* !fw3 */
0 0 zone_wan_prerouting all -- eth1 * 0.0.0.0/0 0.0.0.0/0 /* !fw3 */

Chain INPUT (policy ACCEPT 6615 packets, 455K bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 2812 packets, 202K bytes)
pkts bytes target prot opt in out source destination
763 45780 SS_SPEC_WAN_AC tcp -- * * 0.0.0.0/0 0.0.0.0/0 /* _SS_SPEC_RULE_ */

Chain POSTROUTING (policy ACCEPT 3366 packets, 233K bytes)
pkts bytes target prot opt in out source destination
737K 56M postrouting_rule all -- * * 0.0.0.0/0 0.0.0.0/0 /* !fw3: Custom postrouting rule chain */
35025 3178K zone_lan_postrouting all -- * br-lan 0.0.0.0/0 0.0.0.0/0 /* !fw3 */
517K 39M zone_wan_postrouting all -- * pppoe-wan 0.0.0.0/0 0.0.0.0/0 /* !fw3 */
0 0 zone_wan_postrouting all -- * eth1 0.0.0.0/0 0.0.0.0/0 /* !fw3 */

Chain MINIUPNPD (2 references)
pkts bytes target prot opt in out source destination

Chain MINIUPNPD-POSTROUTING (2 references)
pkts bytes target prot opt in out source destination

Chain SS_SPEC_WAN_AC (2 references)
pkts bytes target prot opt in out source destination
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0 match-set whitelist dst
0 0 SS_SPEC_WAN_FW all -- * * 0.0.0.0/0 0.0.0.0/0 match-set blacklist dst
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0 match-set bplan src
0 0 SS_SPEC_WAN_FW all -- * * 0.0.0.0/0 0.0.0.0/0 match-set fplan src
75 4500 RETURN tcp -- * * 0.0.0.0/0 45.78.45.70 tcp dpt:!53
61 3680 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0 match-set ss_spec_wan_ac dst
572 34320 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0 match-set china dst
0 0 SS_SPEC_WAN_FW all -- * * 0.0.0.0/0 0.0.0.0/0 match-set gmlan src ! match-set china dst
3242 195K SS_SPEC_WAN_FW all -- * * 0.0.0.0/0 0.0.0.0/0

Chain SS_SPEC_WAN_FW (4 references)
pkts bytes target prot opt in out source destination
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/8
0 0 RETURN all -- * * 0.0.0.0/0 10.0.0.0/8
0 0 RETURN all -- * * 0.0.0.0/0 127.0.0.0/8
0 0 RETURN all -- * * 0.0.0.0/0 169.254.0.0/16
0 0 RETURN all -- * * 0.0.0.0/0 172.16.0.0/12
0 0 RETURN all -- * * 0.0.0.0/0 192.168.0.0/16
0 0 RETURN all -- * * 0.0.0.0/0 224.0.0.0/4
0 0 RETURN all -- * * 0.0.0.0/0 240.0.0.0/4
3188 191K REDIRECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 22,53,587,465,995,993,143,80,443,853,9418 redir ports 1234

Chain postrouting_lan_rule (1 references)
pkts bytes target prot opt in out source destination

Chain postrouting_rule (1 references)
pkts bytes target prot opt in out source destination

Chain postrouting_wan_rule (1 references)
pkts bytes target prot opt in out source destination

Chain prerouting_lan_rule (1 references)
pkts bytes target prot opt in out source destination

Chain prerouting_rule (1 references)
pkts bytes target prot opt in out source destination

Chain prerouting_wan_rule (1 references)
pkts bytes target prot opt in out source destination

Chain zone_lan_postrouting (1 references)
pkts bytes target prot opt in out source destination
35025 3178K postrouting_lan_rule all -- * * 0.0.0.0/0 0.0.0.0/0 /* !fw3: Custom lan postrouting rule chain */

Chain zone_lan_prerouting (1 references)
pkts bytes target prot opt in out source destination
692K 53M prerouting_lan_rule all -- * * 0.0.0.0/0 0.0.0.0/0 /* !fw3: Custom lan prerouting rule chain */

Chain zone_wan_postrouting (2 references)
pkts bytes target prot opt in out source destination
517K 39M MINIUPNPD-POSTROUTING all -- * * 0.0.0.0/0 0.0.0.0/0
517K 39M MINIUPNPD-POSTROUTING all -- * * 0.0.0.0/0 0.0.0.0/0
517K 39M postrouting_wan_rule all -- * * 0.0.0.0/0 0.0.0.0/0 /* !fw3: Custom wan postrouting rule chain */
517K 39M MASQUERADE all -- * * 0.0.0.0/0 0.0.0.0/0 /* !fw3 */ mode: fullcone

Chain zone_wan_prerouting (2 references)
pkts bytes target prot opt in out source destination
838 245K MINIUPNPD all -- * * 0.0.0.0/0 0.0.0.0/0
838 245K MINIUPNPD all -- * * 0.0.0.0/0 0.0.0.0/0
838 245K prerouting_wan_rule all -- * * 0.0.0.0/0 0.0.0.0/0 /* !fw3: Custom wan prerouting rule chain */
Jinnrry
215 天前
@kursk #29 好像确实是 fw3 ,我之前看网上说最新版本是 fw4 了,可能是我编译的时候哪里配置没勾选把,还是 fw3
kursk
213 天前
@Jinnrry 转发规则主要体现在这两个 chain 上

Chain PREROUTING (policy ACCEPT 7861 packets, 601K bytes)
pkts bytes target prot opt in out source destination
3187 191K SS_SPEC_WAN_AC tcp -- br-lan * 0.0.0.0/0 0.0.0.0/0 /* _SS_SPEC_RULE_ */
693K 54M prerouting_rule all -- * * 0.0.0.0/0 0.0.0.0/0 /* !fw3: Custom prerouting rule chain */
692K 53M zone_lan_prerouting all -- br-lan * 0.0.0.0/0 0.0.0.0/0 /* !fw3 */
838 245K zone_wan_prerouting all -- pppoe-wan * 0.0.0.0/0 0.0.0.0/0 /* !fw3 */
0 0 zone_wan_prerouting all -- eth1 * 0.0.0.0/0 0.0.0.0/0 /* !fw3 */

Chain SS_SPEC_WAN_AC (2 references)
pkts bytes target prot opt in out source destination
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0 match-set whitelist dst
0 0 SS_SPEC_WAN_FW all -- * * 0.0.0.0/0 0.0.0.0/0 match-set blacklist dst
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0 match-set bplan src
0 0 SS_SPEC_WAN_FW all -- * * 0.0.0.0/0 0.0.0.0/0 match-set fplan src
75 4500 RETURN tcp -- * * 0.0.0.0/0 45.78.45.70 tcp dpt:!53
61 3680 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0 match-set ss_spec_wan_ac dst
572 34320 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0 match-set china dst
0 0 SS_SPEC_WAN_FW all -- * * 0.0.0.0/0 0.0.0.0/0 match-set gmlan src ! match-set china dst
3242 195K SS_SPEC_WAN_FW all -- * * 0.0.0.0/0 0.0.0.0/0

Chain SS_SPEC_WAN_FW (4 references)
pkts bytes target prot opt in out source destination
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/8
0 0 RETURN all -- * * 0.0.0.0/0 10.0.0.0/8
0 0 RETURN all -- * * 0.0.0.0/0 127.0.0.0/8
0 0 RETURN all -- * * 0.0.0.0/0 169.254.0.0/16
0 0 RETURN all -- * * 0.0.0.0/0 172.16.0.0/12
0 0 RETURN all -- * * 0.0.0.0/0 192.168.0.0/16
0 0 RETURN all -- * * 0.0.0.0/0 224.0.0.0/4
0 0 RETURN all -- * * 0.0.0.0/0 240.0.0.0/4
3188 191K REDIRECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 22,53,587,465,995,993,143,80,443,853,9418 redir ports 1234

从 Chain PREROUTING -> Chain SS_SPEC_WAN_AC -> Chain SS_SPEC_WAN_FW

规则采用目标地址匹配,就是这行 rule
SS_SPEC_WAN_FW all -- * * 0.0.0.0/0 0.0.0.0/0 match-set blacklist dst

blacklist 应该是所有需要科学上网的域名返回的 ip 地址,所有流量包的目标地址只要存在于 blacklist ipset 中,就会进入 Chain SS_SPEC_WAN_AC

你可以用 ipset list blacklist 命令看一下哪些 ip 是目标 ip

而 Chain SS_SPEC_WAN_FW 的最后一行 rule
REDIRECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 22,53,587,465,995,993,143,80,443,853,9418 redir ports 1234

再排除了局域网 ip(172.16.0.0/12,192.168.0.0/16.....)后,剩下的都应该是需要科学上网的域名,且如果目标端口是 22,53,587,465,995,993,143,80,443,853,9418,就重定向到 1234 端口(如你所言,是 v2ray 的端口)

所以采用的是目标地址匹配的方法
Jinnrry
212 天前
@kursk 哦哦,我这下明白了,dnsmasq 解析域名的时候通过 ipset 给 ip 打了 blacklist tag ,然后再通过 iptabls 这里的规则做了转发

感谢大佬,整个流程瞬间清晰明了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1041545

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX