首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用iptables将传出的dns查询重定向到本地主机

使用iptables将传出的dns查询重定向到本地主机
EN

Server Fault用户
提问于 2022-10-22 22:40:45
回答 1查看 317关注 0票数 1

问题

在我的Ubuntu服务器中,有一些传出的TCP DNS请求,我无法控制它们被Unbound on 127.0.0.1:53解决,它使用208.67.222.222来解决所有问题,我看到这些TCP DNS数据包最终从我的公共IP地址转移到著名的DNS服务器,如8.8.8.8和1.1.1.1。

我做了什么,

代码语言:javascript
复制
ipset -N myipset iphash
ipset -A myipset 127.0.0.1
ipset -A myipset 208.67.222.222

iptables -t nat -D OUTPUT -m udp -p udp --dport 53 -m set ! --match-set myipset -j DNAT --to 127.0.0.1:53
iptables -t nat -D OUTPUT -m tcp -p tcp --dport 53 -m set ! --match-set myipset -j DNAT --to 127.0.0.1:53

我之所以使用输出,是因为我相信PREROUTING不会影响它们,因为它们是本地生成的,并且是在它们被发送出去之前重定向的。但是,当我为那些TCP数据包运行这些命令DNS时,根本不起作用,但是使用using的dnslookup -vc是有效的。

我的问题

我应该做些特别的事情让这些规则起作用吗?我错过了什么吗?也许更多的sysctl.conf的东西?

/etc/sysctl.conf

代码语言:javascript
复制
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv4.conf.all.route_localnet = 1
net.ipv4.conf.ens3.route_localnet = 1

/etc/unbound/unbound.conf

代码语言:javascript
复制
server:
  port: 53
  cache-min-ttl: 600
  rrset-cache-size: 64m
  msg-cache-size: 32m
  prefetch: yes
  serve-expired: yes
  serve-expired-ttl: 86400
  do-not-query-localhost: no
  tcp-upstream: yes
  outgoing-num-tcp: 2000
  incoming-num-tcp: 2000

remote-control:
  control-enable: yes

forward-zone:
  name: "."
  forward-addr: 208.67.222.222

未绑定正在TCP和UDP端口53上运行。

EN

回答 1

Server Fault用户

发布于 2022-10-23 00:07:10

一个愚蠢的错误。iptables规则没问题。问题在于unbound的S配置(实际上我不知道它是如何工作的!),我也不得不添加access-control,所以它接受来自服务器公共IP地址的TCP请求:

代码语言:javascript
复制
server:
  ...
  access-control: <server public ip address>/24 allow_snoop

然后重新启动unbound。到目前为止还不错。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1113769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档