對於經常要瀏覽油管等被牆網站的人而言,利用代理來實現fq是非常有必要的。現在fq的方法中,最為主流的應該要數ssr了,因此本教程都是基於ssr的socks5代理而言的。
在windows中,ssr客戶端設置的系統代理,大部分應用還是能夠起到作用的,但是也有不少卻不走代理。這里有個不錯的解決方案就是通過sstap來實現網卡層的代理,這樣一來,所有的流量都會通過代理流通轉發出去了。
然而,windows並不是我們的全部,偶爾我也會用用linux,這樣的話,對於linux有沒有較好的全局代理方案呢?這就是本文將要介紹的。
下面我將簡單介紹了linux常見的設置代理方法,以及全局代理的方法。
常見代理
最為常見的是
http_proxy=http://localhost:1080
https_proxy=http://localhost:1080
export http_proxy https_proxy
其中localhost為代理的站點,這里只是以localhost為例;1080為端口,同樣只是為例。
然后導出這兩個環境變量。最后可以在bash里面試試網絡連通性
curl baidu.com
# or
curl google.com
取消這兩個環境變量則用以下命令
unset http_proxy
unset https_proxy
這樣設置完成后,只會在當前bash實例中起作用,如果想在每個實例起作用可以這樣:
首先 vim /etc/profile 然后在末尾加上
http_proxy=http://localhost:1080
https_proxy=http://localhost:1080
export http_proxy https_proxy
保存后再
source /etc/profile
使其生效。如果想將socks代理轉為http代理可以這樣設置
http_proxy=socks5:http://localhost:1080
# or
https_proxy=socks5:http://localhost:1080
這里是socks5的例子,socks4則直接將數字5去掉即可。
iptables全局代理
安裝
redsocks
首先執行這些命令
sudo apt-get install iptables git-core libevent libevent-dev
git clone http://github.com/darkk/redsocks.git
cd redsocks/
make
echo 'base{log_debug = on; log_info = on; log = "file:/tmp/reddi.log";
daemon = on; redirector = iptables;}
redsocks { local_ip = 127.0.0.1; local_port = 12345; ip = 127.0.0.1;
port = 1080; type = socks5; }' > redsocks.conf
大概流程是先克隆redsocks這個項目,然后編譯,添加配置文件。
配置文件中local_ip和local_port表示redsocks這個軟件將要監聽的地址和端口;后面ip和port表示代理服務器的地址和端口。
然后type還有這幾種類型 socks4, socks5, http-connect, http-relay,具體用法可以參考官網或github
iptables
接下來配置iptables防火牆相關的。
直接創建一個腳本文件,方便運行,這里以proxy_iptables_start.sh為例:
#!/bin/bash
# Create new chain
iptables -t nat -N REDSOCKS
# Ignore LANs and some other reserved addresses.
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
# Anything else should be redirected to port 12345
iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345
iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDSOCKS
iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDSOCKS
首先就是防火牆nat表中新建一個名為REDSOCKS的chain,然后忽略一些局域網地址的轉發, 接着就是設置轉發規則了,即轉發80和443端口的流量。
這樣的配置基本就可用了。不過這里我按照官網的另一種配置方法
iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner root -j REDSOCKS
即直接轉發root用戶發起的所有數據包,而不是轉發相應的端口流量,卻並不能起到作用!如有大神,還望指導指導!
運行
還是在之前的redoscks目錄下,
./redsocks -c redsocks.conf
注:若redsocks沒有相應執行權限時,先 chmod +x redsocks 給予執行權限。
這樣redsocks已經開啟在端口12345的監聽了。
然后運行前面那個iptables配置的腳本文件
./proxy_iptables_start.sh
執行完畢后,不出意外的話,打開瀏覽器,不設置代理或直接設置直連
然后百度ip就可以看到ip也變成了代理ip。
這里根據代理ip而定!
停止
停止運行的話,也建議創建一個腳本文件proxy_iptables_stop.sh
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
iptables -t nat -X
iptables -t nat -Z
killall redsocks
然后./proxy_iptables_stop.sh執行該腳本文件即可停止。