我有一台连接到光纤互联网连接的 Debian 10 Buster 服务器。我正尝试在服务器的 53 端口上运行 DNS 服务。我应该使用哪些工具或技术来确定数据包未到达服务器上的 DNS 服务的原因?
系统设置
- 一个网络适配器,
eno1
连接到光纤调制解调器。 - 一个网络适配器,
eno2
连接到LAN。 - 公共 IP
162.246.120.21
。 nftables
作为我的数据包路由子系统。
nftables 规则
table ip filter {
chain input {
type filter hook input priority 0; policy accept;
ct state { established, related } accept
iif "lo" accept
tcp dport { ssh, 52, domain, http, https } counter log accept
udp dport { 52, domain } counter log accept
iif "eno2" tcp dport { ssh, domain, http, https, microsoft-ds } counter log accept
iif "eno2" udp dport { domain, bootps, bootpc } accept
iif "eno2" ip protocol icmp accept
counter drop
}
chain output {
type filter hook output priority 0; policy accept;
ct state { established, related, new } accept
iif "lo" accept
}
chain forward {
type filter hook forward priority 0; policy accept;
iif "eno1" oif "eno2" ct state { established, related } accept
iif "eno2" oif "eno1" accept
iif "eno1" oif "eno2" counter drop
iif "eno1" oif "eno2" counter drop
}
chain postrouting {
type filter hook postrouting priority 0; policy accept;
}
chain INPUT {
type filter hook input priority 0; policy accept;
}
chain FORWARD {
type filter hook forward priority 0; policy accept;
}
chain OUTPUT {
type filter hook output priority 0; policy accept;
}
}
table ip nat {
chain postrouting {
type nat hook postrouting priority 100; policy accept;
oifname "eno1" masquerade
}
}
测试
- 如果我在端口 52 而不是 53 上运行 DNS 服务器,那么远程服务器的测试就可以正常工作。使用 进行测试
dig @162.246.129.21 -p 52 dns.my.tld
。响应快速且正确。 - 如果我在端口 53 上运行 DNS 服务器并从 LAN 上的系统进行测试,则它可以正常工作。使用 进行测试
dig @162.246.129.21 dns.my.tld
。 - 如果我添加
nft
跟踪规则,则在端口 53 的跟踪中看不到远程流量,但可以在端口 52 的跟踪中看到。
chain trace_chain { # handle 39
type filter hook prerouting priority -301; policy accept;
iif "eno1" tcp dport { 52, 53 } nftrace set 1 # handle 40
}
其他
我的 ISP庄严宣誓它们不会阻止任何传入流量,包括端口 53。
我还应该尝试哪些其他工具或技术?
答案1
我终于让本地 ISP 承认封锁了端口 53,并通过从远程 shell 运行到端口 53 的跟踪路由(TCP 和 UDP)并通过电子邮件向他们发送结果来解除对端口 53 的封锁。在此之前,他们一直阻挠我 48 小时,坚称“不存在封锁”