目錄
- [安裝redsocks]
- [配置iptables]
- 設置白名單
- 添加ssrstart ssrclose等便捷命令
- [sock5代理服務器運維]
- 令iptables永久生效,及安裝pdnsd以DNS污染的解決辦法
redsocks
首先安裝redsocks並配置好socks5服務,將socket連接通過iptables重定向到redsocks監聽的本地端口上時,redsocks能夠實現透明代理

iptables
設置iptables,我們需要在nat表上新建一個鏈,命名為SSR
然后在SSR鏈上將所有TCP流量重定向到redsocks監聽的本地端口上,並在OUTPUT鏈上將所有tcp流量跳轉到SSR鏈上
sudo iptables -t nat -F # 清空nat表規則
sudo iptables -t nat -N SSR # 新建SSR鏈
sudo iptables -t nat -A SSR -j REDIRECT -p tcp --to-ports 12345 -m comment --comment 'redsocks全局SSR代理'
sudo iptables -t nat -A OUTPUT -j SSR -p tcp -m comment --comment '跳轉到redsocks全局SSR代理'
現在我們來驗證一下設置是否正確,如果可以telnet任何IP的任何端口就證明tcp流量被重定向到了redsocks程序,
kasumi@kasumi:~$ telnet google.com 80
Trying 172.217.24.14...
Connected to google.com.
Escape character is '^]'.
GET / HTTP/1.1
Host: google.com
^]
telnet> quit
Connection closed.
不過現在它不會返回我們任何數據,此時,系統內部發生了錯誤,因為發生了無限循環的重定向
kasumi@kasumi:~$ sudo service redsocks status
● redsocks.service - Redsocks transparent SOCKS proxy redirector
Loaded: loaded (/lib/systemd/system/redsocks.service; enabled; vendor preset: enabled)
Active: active (running) since 一 2019-11-11 12:08:52 CST; 2h 41min ago
Process: 1210 ExecStart=/usr/sbin/redsocks -c ${CONFFILE} (code=exited, status=0/SUCCESS)
Process: 1192 ExecStartPre=/usr/sbin/redsocks -t -c ${CONFFILE} (code=exited, status=0/SUCCESS)
Main PID: 1213 (redsocks)
CGroup: /system.slice/redsocks.service
└─1213 /usr/sbin/redsocks -c /etc/redsocks.conf
11月 11 14:47:41 kasumi redsocks[1213]: accept: out of file descriptors, backing off for 10797 ms: Too many open files
11月 11 14:47:52 kasumi redsocks[1213]: accept: out of file descriptors, backing off for 21279 ms: Too many open files
11月 11 14:48:13 kasumi redsocks[1213]: accept: out of file descriptors, backing off for 24326 ms: Too many open files
11月 11 14:48:38 kasumi redsocks[1213]: accept: out of file descriptors, backing off for 26179 ms: Too many open files
11月 11 14:49:04 kasumi redsocks[1213]: accept: out of file descriptors, backing off for 692 ms: Too many open files
11月 11 14:49:04 kasumi redsocks[1213]: accept: out of file descriptors, backing off for 605 ms: Too many open files
11月 11 14:49:05 kasumi redsocks[1213]: accept: out of file descriptors, backing off for 5462 ms: Too many open files
11月 11 14:49:10 kasumi redsocks[1213]: accept: out of file descriptors, backing off for 15419 ms: Too many open files
11月 11 14:49:26 kasumi redsocks[1213]: accept: out of file descriptors, backing off for 7611 ms: Too many open files
11月 11 14:49:34 kasumi redsocks[1213]: accept: out of file descriptors, backing off for 45675 ms: Too many open files
我們要做的就是放行局域網和socks5代理服務器IP,此處我們往OUTPUT鏈里設置,設置到SSR鏈也可以,不過最好用SSR鏈專門來設置白名單
Chain_SSR="OUTPUT"
sudo iptables -t nat -I $Chain_SSR -j RETURN -m comment --comment '局域網放行' -d 0.0.0.0/8
sudo iptables -t nat -I $Chain_SSR -j RETURN -m comment --comment '局域網放行' -d 10.0.0.0/8
sudo iptables -t nat -I $Chain_SSR -j RETURN -m comment --comment '局域網放行' -d 100.64.0.0/10
sudo iptables -t nat -I $Chain_SSR -j RETURN -m comment --comment '局域網放行' -d 127.0.0.0/8
sudo iptables -t nat -I $Chain_SSR -j RETURN -m comment --comment '局域網放行' -d 169.254.0.0/16
sudo iptables -t nat -I $Chain_SSR -j RETURN -m comment --comment '局域網放行' -d 172.16.0.0/12
sudo iptables -t nat -I $Chain_SSR -j RETURN -m comment --comment '局域網放行' -d 192.168.0.0/16
sudo iptables -t nat -I $Chain_SSR -j RETURN -m comment --comment '局域網放行' -d 198.18.0.0/15
sudo iptables -t nat -I $Chain_SSR -j RETURN -m comment --comment '局域網放行' -d 224.0.0.0/4
sudo iptables -t nat -I $Chain_SSR -j RETURN -m comment --comment '局域網放行' -d 240.0.0.0/4
sudo iptables -t nat -I $Chain_SSR -j RETURN -m comment --comment 'socks5代理服務器放行' -d 47.95.255.46
恭喜,現在可以全局了

設置白名單
release_domain="cip.cc"
sudo iptables -t nat -I SSR -j RETURN -m comment --comment '白名單域名:'"$release_domain" -d $release_domain
由於這個操作很頻繁,所以我寫了一行交互式的腳本
read -p 請輸入要設置白名單的域名: release_domain && sudo iptables -t nat -I SSR -j RETURN -m comment --comment '白名單域名:'"$release_domain" -d $release_domain && sudo iptables -t nat -nvL --line-number
查看SSR鏈規則
kasumi@kasumi:~$ sudo iptables -t nat -nvL SSR --line-number
Chain SSR (1 references)
num pkts bytes target prot opt in out source destination
1 0 0 RETURN all -- * * 0.0.0.0/0 122.51.162.249 /* 白名單域名:cip.cc */
2 346 20760 REDIRECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 /* redsocks全局SSR代理 */ redir ports 12345

添加 ssrstart ssrclose 等自定義命令
在.bashrc中添加alias別名,從而提供一鍵啟用/關閉代理的命令
alias ssrclose="sudo iptables -t nat -j RETURN -m comment --comment 臨時關閉代理 -I SSR"
alias ssrstart="sudo iptables -t nat -j RETURN -m comment --comment 臨時關閉代理 -D SSR"
alias ssrstatus="sudo iptables -t nat -nvL SSR --line-number"
function ssradd() {
read -p 請輸入要設置白名單的域名: release_domain && sudo iptables -t nat -I SSR -j RETURN -m comment --comment '白名單域名:'"$release_domain" -d $release_domain && sudo iptables -t nat -nvL --line-number
}
socks5
使用國內服務器啟用ssr client, 連接國外ssr server, 從而提供socks5服務
# 令iptables永久生效,及安裝pdnsd以DNS污染的解決辦法- 什么是pdnsd
p dns d -> Proxy DNS Daemon
安裝pdnsd執行tcp查詢,主要配置如下
官方文檔
62 server {
63 label = "root-servers";
64 root_server=on;
65 ip = 8.8.8.8;
66 timeout = 5;
67 uptest = query;
68 interval = 30m; // Test every half hour.
69 ping_timeout = 300; // 30 seconds.
70 purge_cache = off;
71 exclude = .localdomain;
72 policy = included;
73 preset = off;
74 }
啟動本地DNS服務:
sudo pdnsd --tcp -mto -d
為了開機啟動pdnsd,編輯 /etc/default/pdnsd 文件,修改下列行:
START_DAEMON=yes
接下來修改/etc/resolv.conf,將DNS改為127.0.0.1即可
見Github項目https://github.com/develon2015/mysocks5
END
