如今 VPS 確實是白菜價了,以至于很多人都有多 IP 的 VPS。可是 IP 雖多,卻只有一個主 IP(Main IP),在安裝了 Shadowsocks 使用后,往往還是顯示為主 IP。
那么如何使 Shadowsocks 在多 IP 的 VPS 上使用不同的 IP 呢?
這里主要是用到了多用戶運行 Shadowsocks 服務端以及 iptables 設置流量轉發來實現。具體步驟如下:

我們這里以 Shadowsocks-libev 版服務端舉例。
假設你的 VPS 上有 2 個 IP,分別是 IP1 和 IP2。
為此需要新建 2 個用戶來分別運行 Shadowsocks,假設新建的用戶名為 user1 和 user2。

第一步,安裝 Shadowsocks-libev 版服務端
這個不多說,有 Shadowsocks-libev 版一鍵安裝腳本。安裝完畢后,先停止 Shadowsocks :

/etc/init.d/shadowsocks stop

去掉自啟動:

chkconfig --del shadowsocks  # CentOS 用法
update-rc.d -f shadowsocks remove  # Ubuntu 或 Debian 用法

第二步,新增用戶
命令如下:

useradd user1  # 新增用戶 user1
useradd user2  # 新增用戶 user2

第三步,復制和修改配置文件
Shadowsocks-libev 版的配置文件是 /etc/shadowsocks-libev/config.json ,默認里面的內容如下:

{
“server”:”0.0.0.0″,
“server_port”:8989,
“local_address”:”127.0.0.1″,
“local_port”:1080,
“password”:”teddysun.com”,
“timeout”:600,
“method”:”aes-256-cfb”
}

因為是要運行 2 個 Shadowsocks-libev 版服務端進程,所以這里復制一份配置文件。

cp /etc/shadowsocks-libev/config.json /etc/shadowsocks-libev/config2.json

修改 /etc/shadowsocks-libev/config2.json 里的 server_port 為 9000 (數值不和 /etc/shadowsocks-libev/config.json 里的一樣即可)
內容如下:

{
“server”:”0.0.0.0″,
“server_port”:9000,
“local_address”:”127.0.0.1″,
“local_port”:1080,
“password”:”teddysun.com”,
“timeout”:600,
“method”:”aes-256-cfb”
}

第四步,修改 iptables 規則
在第二步新建好的用戶,需要知道其 userid,通過如下命令獲得:

awk -F: '/^user1:/{print $4}' /etc/passwd
awk -F: '/^user2:/{print $4}' /etc/passwd

假設這里獲取到的 userid ,user1 是 501,user2 是 502。

修改 iptables 規則:

/sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8989 -j ACCEPT
/sbin/iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 9000 -j ACCEPT
/sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 501 -j MARK --set-mark 501
/sbin/iptables -t mangle -A OUTPUT -m owner --uid-owner 502 -j MARK --set-mark 502
/sbin/iptables -t nat -A POSTROUTING -m mark --mark 501 -j SNAT --to-source IP1
/sbin/iptables -t nat -A POSTROUTING -m mark --mark 502 -j SNAT --to-source IP2

保存 iptables 配置:

/etc/init.d/iptables save

第五步,啟動 Shadowsocks-libev 版服務端
假設是以 root 用戶登錄的,那么需要分別以 user1 和 user2 運行 Shadowsocks-libev 版服務端。
命令如下:

su - user1 -c '/usr/local/bin/ss-server -u -c /etc/shadowsocks-libev/config.json -f /var/run/shadowsocks-server/pid1 &'
su - user2 -c '/usr/local/bin/ss-server -u -c /etc/shadowsocks-libev/config2.json -f /var/run/shadowsocks-server/pid2 &'

至此,設置完成。
端口 8989 對應 IP1,端口 9000 對應 IP2。