ss如何設置多IP
一、通過請求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