1. 程式人生 > >ss如何設置多IP

ss如何設置多IP

編譯 stp syn tle class nts bsp line shel

一、通過請求IP設定口IP

A: 用戶發出加密請求到SSS服務器

B: SSS服務器解密請求後轉發到目標服務器

C: 目標服務器回應SSS服務器

D: SSS服務器加密回應返回給用戶然後解密後使用

其中步驟B是影響出口IP的關鍵步驟,需要制定iptables規則修改源ip

理論上做SNAT處理即可,但SSS轉發用戶請求時端口由系統隨機分配,目標服務器、端口不可預測。

簡單說,從SSS出去的數據包,已經不是用戶發出的那個包了,在sourcePort、destIP、destPort都不可控的情況下去修改sourceIP

結論:不可行

二、iptables Owner Match 方案


SSS作者clowwindy在#131給了參考方案:https://github.com/shadowsocks/shadowsocks/issues/131

通過iptables的Owner match來實現,前提是用不同的用戶啟動多個不同的SSS實例

Owner match支持–uid-owner、–pid-owner、–sid-owner、–cmd-owner匹配

很可惜我的vps上不支持–pid-owner,需要編譯內核,遂放棄,決定采用 –uid-owner模式

思路是建幾個用戶分別啟動SSS實例,並使用不同的端口(如1081、1082、1083),再做簡單的端口重定向

第一步、建立用戶

1 2 3 4 #The -r flag will create a system user - one which does not have a password, a home dir and is unable to login. useradd -r sss1081 useradd -r sss1082 useradd -r sss1083

第二步、多SSS實例配置
分別給實例指定不同的配置文件config1081.json、config1082.json、config1083.json,啟動腳本如下

1 2 3 4 rm
-f /tmp/sss_* sudo -u sss1081 bash -c ‘nohup /usr/local/bin/ssserver -c /etc/sss/config1081.json >/tmp/sss_1081 &‘ sudo -u sss1082 bash -c ‘nohup /usr/local/bin/ssserver -c /etc/sss/config1082.json >/tmp/sss_1082 &‘ sudo -u sss1083 bash -c ‘nohup /usr/local/bin/ssserver -c /etc/sss/config1083.json >/tmp/sss_1083 &‘

第三步、出口IP地址配置(–uid-owner匹配)

1 2 3 iptables -t nat -A POSTROUTING -m owner --uid-owner sss1081 -j SNAT --to-source 192.168.0.1 iptables -t nat -A POSTROUTING -m owner --uid-owner sss1082 -j SNAT --to-source 192.168.0.2 iptables -t nat -A POSTROUTING -m owner --uid-owner sss1083 -j SNAT --to-source 192.168.0.3

到此,多出口IP已經完成,SSS服務器上現有3個出口IP和N個不同的SSS組合,比如:
192.168.0.1:1081、192.168.0.2:1082、192.168.0.3:1083、192.168.0.1:1082、192.168.0.1:1083等等
作為輕微強迫癥患者,實在受不了,想簡化一下,只留一個1081對外開放:
192.168.0.1:1081(出口192.168.0.1)、192.168.0.2:1081(出口192.168.0.2)、192.168.0.3:1081(出口192.168.0.3)

第四步、簡化
思路:禁止1082、1083的對外開放,並做個轉發,192.168.0.2:1081 轉發到 192.168.0.2:1082, 192.168.0.3:1081 轉發到 192.168.0.3:1083

ss如何設置多IP