我的一个linux机器有10个ip,ip分别是:
222.222.222.2(主ip)
222.222.222.3
...
222.222.222.10
我在上面跑了ss服务,目的是访问任意一个都可以。
现在的情况却是,不管我访问的是哪个ip,用www.ip138.com查看的ip都是222.222.222.2这个主ip的返回结果。
分析一下原因(谢楼下两位指点),由于ss是socks服务,不管客户端访问的哪个ip过来,服务器在对外访问的时候,走的都是缺省路由,也就会用222.222.222.2这个ip。
所以,虽然ss客户端与服务器之间连接用任意ip都可以,但是服务器去访问www.ip138.com时都会用222.222.222.2这个ip。
怎样才可以改成,我访问某个ip,那么数据就从这个ip向外访问,并且按这个ip原路返回?
.
题主,请你解释一下这段话:
你的“访问”是什么意思?是连接到你服务器不同IP的ss服务,然后通过ss上网查询当前IP么?
上面是我对你描述的猜测,
对于你本机和SS服务器之间的连接,如果你连的是222.222.222.3,服务器是不可能用222.222.222.2返回数据的,返回了也会被直接丢包。
所以如果我对你的描述猜对了的话,你要改的是你服务器的默认出口IP吧。
SS是socks代理,你透过SS访问网页完全等同于你的服务器发起请求,所以默认只能从默认的网关出去。
从单个程序来说,主动选择一个出口IP是可以的(比如wget的--bind-address),对于SS来说貌似需要改很多代码
这个问题很难搞啊,因为ss是用户态的,走的系统路由,系统说走哪就走哪。
办法也不是没有,就是用iptables做。难度有点高,我没成功过,就不瞎贴了。
倒是找到了这个方法,是通过iptables来做的。
http://shadowsocks.be/7.html
https://www.6zou.net/tech/shadowsocks-multiple-ips-outbound-with-iptables-how-to.html
要是100个ip,那不是很麻烦?