小编cda*_*uth的帖子

DNAT 到 127.0.0.1,带有 iptables/透明 SOCKS 代理的目标访问控制

我有一台运行在本地网络上的服务器,它充当网络中计算机的路由器。我现在想要实现的是,对某些 IP 地址的传出 TCP 请求通过 SSH 连接进行隧道传输,而不会让我的网络中的人使用该 SSH 隧道连接到任意主机。

到目前为止,我想到的方法是让一个redsocks实例在 localhost 上侦听,并将所有传出请求重定向到我想转移到该 redsocks 实例的 IP 地址。我添加了以下 iptables 规则:

iptables -t nat -A PREROUTING -p tcp -d 1.2.3.4 -j DNAT --to-destination 127.0.0.1:12345
Run Code Online (Sandbox Code Playgroud)

显然,Linux 内核将来自非 127.0.0.0/8 地址到 127.0.0.0/8 地址的数据包视为“火星数据包”并丢弃它们。但是,有效的是让 redsocks 监听 eth0 而不是 lo,然后让 iptables DNAT 将数据包发送到 eth0 地址(或使用 REDIRECT 规则)。问题在于,我网络上的每台计算机都可以使用 redsocks 实例连接到 Internet 上的每台主机,但我想将其使用限制为仅一组特定的 IP 地址。

有什么办法可以让 iptables DNAT 数据包发送到 127.0.0.1?否则,有没有人知道如何在不向所有人开放隧道的情况下实现我的目标?

更新:我也尝试过更改数据包的来源,但没有成功:

iptables -t nat -A POSTROUTING -p tcp -s 192.168.1.0/24 -d 1.2.3.4 -j SNAT --to-source 127.0.0.1
iptables …
Run Code Online (Sandbox Code Playgroud)

linux iptables

3
推荐指数
3
解决办法
4597
查看次数

标签 统计

iptables ×1

linux ×1