首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改给定命令的默认绑定接口的工具?

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

Server Fault用户
提问于 2011-06-17 21:37:54
回答 3查看 4.6K关注 0票数 6

这与更改用户界面有某种关系

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

代码语言:javascript
复制
theprogram --use-interface=1.2.3.4 wget google.com

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

EN

回答 3

Server Fault用户

回答已采纳

发布于 2011-06-17 23:29:23

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

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

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

  • http://www.semicomplete.com/blog/tags/ld_预压
  • http://manpages.ubuntu.com/manpages/hardy/man1/authbind.1.html
  • http://daniel-lange.com/software/bindhack.c

只有运行的代码不是SUID (出于安全原因,不能使用LD_PRELOAD修改SUID/SGID程序),这才能工作。

票数 2
EN

Server Fault用户

发布于 2011-06-17 21:43:41

对于wget,您可以使用-绑定地址。

否则,我认为您要么需要为目标IP地址指定路由,要么查看您试图使用的程序,如果它有确定绑定/源地址的方法。

票数 1
EN

Server Fault用户

发布于 2011-06-17 22:06:22

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

对于不支持绑定到特定地址的程序,您的选择可能会更有限,这取决于您处理的是哪种程序。

对于服务器程序(接收传入连接),通常可以通过侦听所有地址(通常是默认地址)来完成相同的任务,然后使用iptables或外部路由器预先设置其他地址。

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

您可以使用iptables和SNAT规则完成所需的任务。

代码语言:javascript
复制
iptables -A POSTROUTING -p tcp --dport 80 -j SNAT --to-source 1.2.3.4

这个iptable规则(我还没有测试过)应该更改到端口80的任何流量上的源地址。如果tcp和udp流量都需要相同的行为,则需要创建两个规则,在第二个规则中将'-p‘替换为'-p’。

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

https://serverfault.com/questions/281674

复制
相关文章

相似问题

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