linux – 将传出的SOCKS服务器流量绑定到特定IP

linux – 将传出的SOCKS服务器流量绑定到特定IP,第1张

概述在办公室,我们可以通过SOCKS服务器访问Web,该服务器使用以下命令启动: ssh localhost -f -N -D *:8888. 此服务器有2个IP(但只有一个网卡): eth0 xx.yy.zz.1 eth0:1 xx.yy.zz.2 因此浏览器配置为使用socks代理xx.yy.zz.2:8888 当我检查网站看到的IP是什么时,它会给我xx.yy.zz.1(服务器的默认IP). 但 在办公室,我们可以通过SOCKS服务器访问Web,该服务器使用以下命令启动:
ssh localhost -f -N -D *:8888.

此服务器有2个IP(但只有一个网卡):
eth0 xx.yy.zz.1
eth0:1 xx.yy.zz.2

因此浏览器配置为使用socks代理xx.yy.zz.2:8888

当我检查网站看到的IP是什么时,它会给我xx.yy.zz.1(服务器的默认IP).
但我希望它是另一个(xx.yy.zz.2).

如何将传出连接绑定到第二个IP?

编辑:
这可以用iptables解决吗?
可能有一种方法可以判断哪些数据包来自给定的SSH隧道,然后修改其目标IP?

EDIT2:
我想到的另一个想法是,是否有某种包装命令强制另一个命令绑定到给定的IP?

解决方法 在进行动态端口转发时,SSH协议无法让客户端告诉服务器绑定到某个地址,所以不,不能告诉SSH客户端这样做.你不能告诉OpenSSH服务器也这样做.它将盲目地使用getaddrinfo连接到您的远程主机.

唯一的解决方法是配置您的服务器,使其达到您想要的效果.不幸的是,你无法从路由或iptables告诉OpenSSH服务器建立了什么连接.问题很难:OpenSSH可能会打开连接,但也可能产生一个shell,它可以产生其他进程也可以打开连接.区别于这两个案例很难.如果OpenSSH只是设置一个标记或任何东西会更容易,但事实并非如此.

所以你的解决方案有限:

>使用单独的SOCKS服务器,允许您配置绑定地址.
>配置内核,使其默认使用xx.yy.zz.2进行所有传出连接,或者预先知道所使用的实际目标IP.

要在没有源地址时分配源地址,内核会查看目标地址的已使用路由条目,如果它具有首选源地址,它将使用它.否则,它会选择一些最适合该任务的地址.无论选择什么,都可以在src令牌之后通过ip route get(destination)命令进行检查:

$ip route get 8.8.8.8
8.8.8.8 via(也许是你的网关)dev eth0 src xx.yy.zz.1
[…]

您可以使用ip route命令修改路由表,以使用ip route change […] src xx.yy.zz.2添加首选源地址.您甚至可以通过相同的网关添加更具体的路由,但使用不同的路由首选源地址.
>将OpenSSH放入仅处理xx.yy.zz.2地址的网络命名空间.这种解决方案有点过分,可能会更改服务器上许多服务的配置,因为它实际上隔离了您的两个地址.此解决方案将涉及系统中的许多更改,尤其是有关sshd守护程序和socks服务器启动方式的更改.

与所有这些无关:在Linux上不推荐使用“接口别名”(例如eth0:1).它们仍然可以作为ifconfig等历史工具的向后兼容性,但你应该真正摆脱它们并使用内核的本机功能来获得每个接口的多个地址.停止使用ifconfig,路由并使用ip addr和ip route代替.

使用ip addr add … dev eth0为eth0接口添加地址.您可以根据需要添加任意数量的地址.使用ip addr列出所有内容.有关详细信息,请参阅ip addr和ip route的手册页.

总结

以上是内存溢出为你收集整理的linux – 将传出的SOCKS服务器流量绑定到特定IP全部内容,希望文章能够帮你解决linux – 将传出的SOCKS服务器流量绑定到特定IP所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1040492.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存