交流評論、關注點贊

  • Facebook Icon臉書專頁
  • telegram Icon翻牆交流電報群
  • telegram Icon電報頻道
  • RSS訂閱禁聞RSS/FEED訂閱

用 ss-redir 或 redsocks 搭建透明網關

2018年12月04日 7:16 PDF版 分享轉發

來源:https://xixitalk.top/blog/2018/08/31/transparent-proxy/

原生的Android刷機后第一次開機系統初始設置要連接谷歌伺服器,如果沒有透明代理就很麻煩,進不了桌面。這裏可以通過一台Linux的機器(我用的是第一代)來達到透明代理的作用。平常情況下手機,平板和機頂盒也可以通過透明代理上網,簡化配置。

環境要求

手機和樹莓派在同一個,並且可以相互訪問,手機的WiFi連接,樹莓派可以是也可以是網線連接(沒有無線網路的第一代樹莓派即可)。有可用的SS / 或者SOCKS5代理。

用SS-redir的搭建帶SS代理的埠

如果是SSR用r-libev里的SS-再導向。注意後者多了一個r。我用的是SSR,在樹莓派上自己編譯的shadowsocksr-libev ,下面以SSR為例,SS類似。

配置ss-redir.json,參數和配置SSR一樣,注意:"local_address":"0.0.0.0",這個必須為0.0.0.0。如果同一個機器上也運行SSR,local_port要用不同的埠,如SSR用1081,ss-redir用1088,下面配置里會用到1088這個埠。

運行SS-再導向,-v會顯示一些日誌信息:

Ad:美好不容錯過,和家人朋友一起享受愉快時光,現在就訂票
./ss-redir -v -c ss-redir.json  

調試完成後,實際運行可以用:

nohup ./ss-redir -c ss-redir.json > /dev/null 2>&1 &  

啟用內核轉發

使用iptables的轉發需要打開內核的IPv4轉發功能,編輯/etc/sysctl.conf中,設置把net.ipv4.ip_forward = 1,讓更新實時生效:

sudo sysctl -p /etc/sysctl.conf  

設置iptables的,IPSET轉發

設置iptables的的目的是將本機特定IP的流量轉向β-redir的監聽的埠,這個埠是帶代理的,這樣特定IP的流量就自動代理了。可以配置跳過無需代理的中國IP.iptables執行要根許可權,可以切換到根用戶,或者用須藤方式運行。

先獲取中國IP範圍,保存文件是cn.zone。

wget -P . http://www.ipdeny.com/ipblocks/data/countries/cn.zone  

創建china.ipset腳本,內容如下:

# Destroy ipset if it already exists  #sudo systemctl stop iptables.service  sudo ipset destroy china    # Create the ipset list  sudo ipset -N china hash:net    # remove any old list that might exist from previous runs of this script  #rm cn.zone    # Pull the latest IP set for China  #wget -P . http://www.ipdeny.com/ipblocks/data/countries/cn.zone    # Add each IP address from the downloaded list into the ipset 'china'  for i in $(cat ./cn.zone ); do ipset -A china $i; done  

運行腳本創建中國的IPSET,腳本會把cn.zone文件里的IP段都加到中國的IPSET里。

sudo bash china.ipset  

創建的iptables命令腳本

iptables -t nat -N REDSOCKS  # 在 nat 表中創建新鏈    iptables -t nat -A REDSOCKS -p tcp --dport 28888 -j RETURN  # 28888 是 ss 代理伺服器的埠,即遠程 shadowsocks 伺服器提供服務的埠,如果你有多個 ip 可用,但埠一致,就設置這個    iptables -t nat -A REDSOCKS -d 11.11.11.11 -j RETURN  # 11.11.11.11 是 ss 代理伺服器的 ip, 如果你只有一個 ss伺服器的 ip,卻能選擇不同埠,就設置此條    iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN  iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN  iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN  iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN  iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN  iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN  iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN  iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN  # 過濾區域網IP    iptables -t nat -A REDSOCKS -p tcp -m set --match-set china dst -j RETURN  # 過濾國內IP段,IP保存在china ipset里    iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 1088  # 1088 是 ss-redir 的監聽埠,ss-local 和 ss-redir 的監聽埠不同,配置文件不同    iptables -t nat -I PREROUTING -p tcp -j REDSOCKS  # 在 PREROUTING 鏈前插入 REDSOCKS 鏈,使其生效  

把上面的命令保存成iprules.sh文件,運行設置到系統里。

sudo bash  iprules.sh  

如果設置錯誤,清理iptables的設置用下面的命令:

sudo iptables -t nat -F  

手機端設置

手機端WiFi連接,選擇靜態IP,網關填寫樹莓派的IP。如果正常,此時手機不用配置代理即可正常訪問Google伺服器。

驗證國內IP過濾

訪問ip138和淘寶IP,看看IP是不是國內IP,如果是國內IP就說明國內IP過濾成功了,國內IP沒有走代理;相反如果是SSR伺服器的IP,說明國內IP過濾配置失敗了。

用redsocks2替代β-redir的

樹莓派上本來跑了個SSR,環境太惡劣,經常需要tcping找可用的地址,重啟SSR,不想再維護β-再導向的穩定性了,所以切換到redsocks了,redsocks可以直接用SSR提供socks5的代理,只維護SSR穩定可用即可。
沒有用原版的redsocks,使用了修改版的redsocks2,下載源代碼編譯略過。

redsocks2的配置config.json如下。如果socks5的代理是本機,ip = 192.168.1.104;行改成ip = 0.0.0.0;。文件配置里log_debug log_info daemon調試的時候可以根據需要配置上分類中翻譯關閉或者,daemon = on是後台運行。這裏redsocks監聽的埠也配置成1088。

base {          log_debug = off;          log_info = off;            log = "file:/home/pi/redsocks/log.txt";            daemon = on;            redirector = iptables;  }    redsocks {          local_ip = 0.0.0.0;          local_port = 1088;            listenq = 128;            ip = 192.168.1.104;          port = 1081;            type = socks5;            autoproxy = 0;          timeout = 10;    }    ipcache {      cache_size = 4;      stale_time = 900;      port_check = 1;      cache_file = "/tmp/ipcache.txt";      autosave_interval = 3600;  }  

運行redsocks2

sudo ./redsocks2 -c ./config.json  

據說redsocks穩定性可能有些問題,配置的cron計劃任務,每天凌晨3點重啟一下好了。

IPSET設置速度優化

sudo bash china.ipset設置IPSET后,可以把IPSET設置保存起來,後面再恢復速度就快很多。

sudo ipset save > ipset.save.txt  

把下面腳本保存為ipset.restore.sh,每次開機設置一次。sudo iptables -t nat -F三條的含義是清空iptables nat配置,不然多次執行ipset會提示正在使用,禁止毀滅。建議:每次應該都是先設置ipset,再設置iptables的。

#!/bin/bash    sudo iptables -t nat -F  sudo iptables -t nat -X  sudo iptables -t nat -Z    sudo ipset destroy china  sudo ipset restore < ipset.save.txt  

其他說明

  • 不支持UDP流量轉發,DNS污染用其他方法解決。我用的dnsmasq + overture.dnsmasq做緩存,推動做域名翻牆和國內IP分流.overture國內使用dnspod的DNS服務,國外使用8.8.8.8,這兩個DNS服務都支持EDNS。
  • iptables的規則可以SH腳本運行,或者iptables-save命令後用的iptables-恢復來載入

參考資料

  1. ss-redir透明代理
  2. linux用shadowsocks + iptables + ss-redir實現全局代理
  3. Ubuntu的編譯運行Redsocks2實現透明代理
  4. 使用iptables,ipset的全局智能代理

搬瓦工翻牆 Just My Socks

推薦安卓翻牆APP:SpeedUp VPN

Android版SpeedUp ,基於ShadowsocksRb,與SSR和Shadowsocks協議兼容,內置免費SSR伺服器。 如果您對內置SSR VPN伺服器不滿意,則可以自行添加或導入任何SSR和Shadowsocks伺服器使用。

喜歡、支持,請轉發分享↓Follow Us 責任編輯:趙凌雲