如何实现 dnsmasq 按用户 IP 段做条件转发

189 天前
 yyfdsz

现状: 企业内网建有一台 dnsmasq 接收本厂区所有用户请求, 上游是公共 DNS. 网络有电信、移动双线按部门网段分流, 而 dnsmasq 走的是电信, 解析结果对走移动的用户不友好, 为了实现多 AD 域转发和自定义解析又不能直接使用外部 DNS. 如何实现一个内网 DNS 针对不同内网网段的请求, 返回不同运营商的解析结果? 实现方式不限, 服务器数量不限. 我的设想:

  1. dnsmasq 改双网卡或使用不同公共 DNS+防火墙设置目的地址策略路由实现指定运营商解析, 但 DNS 上没找到匹配用户网段做条件转发的相关配置, 以及系统层面能否做到.
  2. 后端新建走电信、移动的两台 DNS, 原 DNS 依然需要匹配用户网段做条件转发. 端口转发也可, 如何实现?
1294 次点击
所在节点    DNS
12 条回复
wheat0r
189 天前
最简单的方法,装两台 dnsmasq
tomczhen
189 天前
mosdns
yaott2020
189 天前
两个 dnsmasq 监听不同端口,分别设置不同上游,用 iptables 根据源 ip 重定向到不同端口
zzlyzq
189 天前
把当前 dnsmasq 变成 haproxy ,然后用两个 dnsmasq 服务器分别对应移动和电信,然后 haproxy 采用 round-robin 进行负载。
aogg
189 天前
coredns
GeekGao
189 天前
在 dnsmasq 配置文件中定义不同的地址段,并为每个地址段分配一个 tag 。然后,可以使用“server”指令为每个 tag 指定不同的上游 DNS 服务器, 使用“dhcp-option”指令为每个 tag 设置不同的 DNS 服务器。
这样就能根据用户的 IP 地址段将 DNS 查询转发到不同的上游 DNS 服务器了。
kursk
189 天前
dnsmasq 只能基于域名区别,不能基于源 ip ,iptables 才能干这个

我是一个企业用户,有两个互联网的出口,假设 ip 分别为 10.1.0.1 和 10.2.0.1 ,如何用 Iptables 实现根据内部用户的 ip 地址,分别从不同的出口出去

为了根据内部用户的 IP 地址使流量通过不同的网络出口,可以使用 Linux 的 iptables 和 iproute2 工具。下面的示例假设您的两个互联网出口接口分别为 eth1 和 eth2 ,内部网络接口为 eth0 。

创建路由表:
首先,在/etc/iproute2/rt_tables 文件中添加两个新的路由表,例如 table1 和 table2:
plaintext
Copy code
echo "200 table1" >> /etc/iproute2/rt_tables
echo "201 table2" >> /etc/iproute2/rt_tables
配置路由:
为每个表添加路由。假设默认网关为 10.1.0.1 和 10.2.0.1:
bash
Copy code
ip route add default via 10.1.0.1 table table1
ip route add default via 10.2.0.1 table table2
配置规则:
基于源 IP 地址添加规则,将特定的流量定向到正确的表:
bash
Copy code
ip rule add from 192.168.1.0/24 table table1
ip rule add from 192.168.2.0/24 table table2
在上面的例子中,所有从 192.168.1.0/24 网络来的流量将通过 10.1.0.1 出口,所有从 192.168.2.0/24 网络来的流量将通过 10.2.0.1 出口。

配置 iptables:
如果需要,还可以使用 iptables 来管理、过滤或修改流量:
bash
Copy code
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth2 -j MASQUERADE
上面的命令将确保从指定网络发出的所有数据包都会经过正确的网络接口,并且会应用正确的源地址伪装( NAT )。

这样,您就可以根据内部用户的 IP 地址,将流量路由到不同的网络出口。请注意,这个配置可能需要根据您的实际网络环境和需求进行调整。
Dzsss
189 天前
超 DNSMASQ 纲了,换用 RouterOS 。
renothing
189 天前
楼主的需求可以看看 blocky , 针对不同 clients 使用不同的 upstream
yyfdsz
188 天前
感谢大家的回复,我来测试
hyyNull
188 天前
还有一个 SmartDNS 跟 MosDNS 这俩都是标榜多运营商多线路 DNS 优选的,建议开这个然后再 dnsmasq 里给不同网段 dhcp 下放不同的 DNS
zwyyy456
101 天前
@GeekGao 请问一下,定义不同的地址段并为每个地址段分配一个 tag 之后,仅使用 "server" 指令为每个 tag 指定不同的上游 dns 服务器可以吗?
"使用“dhcp-option”指令为每个 tag 设置不同的 DNS 服务器" 这一步是必须的嘛?

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

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

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

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

© 2021 V2EX