我的子网中有两个网关。192.168.1.2 - 主 192.168.1.1 - 次要(是的,这不是错误)
所以我在所有地方都使用 192.168.1.2 作为默认路由
是否可以配置 danted,使其将传出连接转发到辅助网关 (192.168.1.1),而主系统将使用主网关?或者我应该对 iptables 进行一些调整来实现这一点?
其他可能的解决方案是使用不同的网络堆栈执行 lxc 容器,但我试图在 RAM 不多且没有那种冗余解决方案的情况下在 rpi 上实现相同的目标。
所以我想知道它是否支持开箱即用的功能,或者我可以在没有任何虚拟化的情况下拆分网络堆栈?(可能与其他网关创建虚拟接口,然后将该辅助接口传递给 danted)
谢谢
答案1
因此,该机器上的主要网关是 192.168.1.2。我想将特定用户的所有流量重定向到另一个网关 192.168.1.1
创建将被重定向到另一个网关的新用户
useradd -m proxy
添加新的路由表
echo "201 gw1" >> /etc/iproute2/rt_tables
添加 IP 规则,以便所有标记的数据包将进入新的路由表
ip rule add fwmark 0x1 table gw1
ip route add default via 192.168.1.1 dev eth0 table gw1
标记来自用户代理的所有数据包(并允许我们的子网无需任何重定向即可进行通信)
iptables -A OUTPUT -t mangle -o eth0 ! -d 192.168.1.0/24 -m owner --uid-owner proxy -j MARK --set-mark 1
这样用户代理将使用单独的路由表
现在所有 IP 流量都正常工作,但 DNS 不起作用
curl -H "Host: ifconfig.me" 216.239.32.21
DNS 请求不起作用,因为它尝试使用通过主网关路由的 127.0.0.1:53
现在也将 DNS 流量重定向到同一网关,不让它接触 127.0.0.1:53
iptables -t nat -A OUTPUT -m owner --uid-owner proxy -p udp --dport 53 -j DNAT --to 192.168.1.1:53
iptables -t nat -A OUTPUT -m owner --uid-owner proxy -p tcp --dport 53 -j DNAT --to 192.168.1.1:53
您也可以将 8.8.8.8 放在那里,它将通过 192.168.1.1 传递,主要思想是让它远离本地缓存 DNS 服务器
现在 DNS 请求路由正常,你可以用嗅探器检查,但是 dig 仍然显示来自默认网关的 DNS
curl ifconfig.me
通过让 danted(或任何其他应用程序)在 dated.conf 中以代理用户身份运行来使用该规则
#user.privileged: root
user.notprivileged: proxy
#user.libwrap: libwrap
现在,您可以将 ip 规则、ip 路由和 iptables 行添加到 rc.local,并将浏览器指向 danted socks 服务器。所有出站流量都将路由到 192.168.1.1 网关
答案2
我已按照您的步骤操作,并且它适用于 3 个网关,但是当我添加 4-s 网关及更多网关时 - DNS 无法解析添加的网关(互联网和代理在所有具有外部 DNS 服务器的网关上运行正常,但网关 DNS 除外)。
所有规则、sockd 实例和防火墙规则都有唯一的“uid-owners”。
在 resolv.conf 中它被排序为(仅适用于 .10.1、.11.1、.12.1):
192.168.10.1
192.168.11.1
192.168.12.1
192.168.13.1
192.168.14.1
当我将 resolv.conf 顺序更改为:
192.168.14.1
192.168.13.1
192.168.12.1
192.168.11.1
192.168.10.1
DNS 仅适用于 .13.1、.14.1、.15.1,所有下一个网关的 DNS 均无法解析。
我检查了一下,发现它限制在 resolv.conf 文件 DNS 列表(内核源文件中的 MAXNS 限制为 3)。
我的主要观点是让每个 socks 代理都有自己网关指定的 DNS 并且不要互相混合,但我无法实现它,因为第三个之后的所有 DNS 都不起作用。
我不明白为什么系统会触碰 resolv.conf,因为它被防火墙直接重定向到网关 DNS,为此花了几天时间,但根本无法解决这个问题。