用于更改给定命令的默认绑定接口的工具?

用于更改给定命令的默认绑定接口的工具?

这在某种程度上与更改执行 whois 的界面

不同之处在于我想知道是否可以仅为特定程序指定默认接口 - 而不是系统范围的。例如:假设我的服务器有多个 IP。我想运行程序 X(例如 wget),并且我希望它使用我的一个 IP 作为源地址。它看起来像这样:

theprogram --use-interface=1.2.3.4 wget google.com

并且 wget 将使用我的 IP 1.2.3.4 连接到 google.com 并获取 html。这可能吗?

答案1

这里的一些人已经为您想要做的事情提出了一些可行的替代方案。路由和源 NAT 可以提供帮助,但不一定能解决您试图解决的问题。

如果你愿意做很多事情,就按照你要求的去做。你可以使用函数插入通过使用您选择的代码LD_PRELOAD来包装系统调用。bind()

以下页面提供有关此解决方案的更多详细信息:

这仅在你运行的代码满足以下条件时才有效:不是SUID(出于安全原因,不能使用 修改 SUID/SGID 程序LD_PRELOAD)。

答案2

使用 wget 时,您可以使用 --bind-address

否则,我认为您要么需要为目标 IP 地址指定一条路由,要么查看您尝试使用的程序是否有办法决定绑定/源地址。

答案3

许多(但绝不是所有)程序都有绑定到特定地址的选项。有些程序(如 wget)(如 fbh 所指出的)有一个命令行选项来指定要绑定到哪个地址。许多类似服务器的程序(如 apache 和 squid)在其配置文件中控制这一点。它始终是特定于程序的。

对于不支持绑定到特定地址的程序,您的选择可能会更加有限,具体取决于您所处理的程序类型。

对于服务器程序(接受传入连接),您通常可以通过监听所有地址(通常是默认地址),然后使用 iptables 或外部路由器来拦截其他地址来完成相同的操作。

更棘手的是出站连接。在这里,您需要更多类似于您在问题中链接的答案中描述的内容。问题在于它依赖于目标地址,而不是源程序。

您可能能够使用 iptables 和 SNAT 规则完成您想要的操作。

iptables -A POSTROUTING -p tcp --dport 80 -j SNAT --to-source 1.2.3.4

这个 iptables 规则(我已经不是已测试)應該更改任何流向端口 80 的流量的源地址。如果您需要对 tcp 和 udp 流量执行相同的行为,则需要创建两个规则,在第二条规则中将“-p tcp”替换为“-p udp”。

相关内容