Socks5代理(SSH)轉國內PPTP的方法
某知名正向代理軟體和SSH這種Socks5代理工具最常用的一種使用方法是在瀏覽器上配置代理埠,然後指向該工具監聽的1080埠的方式進行代理,這是Windows系統使用者最常見的方式,這樣無法進行全域性代理和UDP代理。而且部署起來也稍顯麻煩,需要下載客戶端配置伺服器地址等等步驟。其實通過SS-libev自帶的透明代理元件ss-redir或者使用第三方的透明代理工具比如redsocks2完全可以實現透明代理並轉換為虛擬專用網使用,下面介紹在Ubuntu系統中將SS客戶端代理轉為PPTP的方法。
先介紹一下原理:
虛擬專用網的原理就是在服務端虛擬一個網絡卡,一般叫ppp0,然後通過這塊虛擬網絡卡給接入裝置分配一個IP地址,這個IP地址可以很隨意,比如我分配192.168.0.2-254給客戶端,給服務端Ubuntu電腦分配192.168.0.1,而我Ubuntu電腦公網地址是192.168.1.81.
既然有這樣一塊虛擬網絡卡,那麼事情就非常好辦了,我之前做過在一臺Ubuntu筆記本上,具備有線網絡卡和無線網絡卡兩塊硬體網絡卡,讓無線網絡卡分享一個wifi出來,然後通過有線網絡卡進行上網,這樣客戶端裝置只需要連線上Ubuntu電腦分配出來的Wifi就可以通過SS的透明代理進行科學上網的方法。而虛擬專用網的改造方法和這個一模一樣,只不過把筆記本上無線網絡卡換成了現在的虛擬網絡卡,像原來的無線網絡卡一樣配置SS和NAT就可以,客戶端的請求還是會像以前一樣經過PREROUTING表,可以截獲進行路由。配置無線網絡卡的方式可以參考我之前的文章《Ubuntu編譯執行ss-redir打造透明代理Wifi環境
下面介紹一下具體的實現步驟
首先我們搭建一個普通的PPTP伺服器,在Ubuntu上搭建PPTP伺服器非常簡單,有很多文章介紹過,Openwrt就比較複雜了,下面介紹我的搭建方法
首先下載安裝pptpd
sudo apt-get install pptpd
編輯/etc/pptpd.conf檔案,尋找如下內容前面的#去掉並做修改
debug ppp /usr/sbin/pppd #指向pppd程式的地址,預設即可 option /etc/ppp/pptpd-options #指定DNS配置檔案的地址,預設即可 localip 192.168.0.1 #本機虛擬網絡卡的內網地址 remoteip 192.168.0.2-254 #準備分配給客戶端的內網地址段
2、編輯 /etc/ppp/chap-secrets,這裡增加客戶端虛擬專用網的帳號密碼和繫結的IP,*為自動分配IP如:
# Secrets for authentication using CHAP # client server secret IP addresses 使用者名稱1 pptpd 密碼1 * 使用者名稱2 pptpd 密碼2 192.168.0.1 使用者名稱3 pptpd 密碼3 192.168.0.23、編輯/etc/ppp/pptpd-options檔案,修改DNS地址,找到MS-DNS取消掉註釋,然後修改DNS地址比如114.114.114.114
ms-dns 192.168.1.81我這裡配置192.168.1.81的原因是我這臺電腦上的53埠開啟的pdnsd來防止DNS汙染,所以設定本機為DNS伺服器
ms-dns 114.114.114.114
4、開啟Linux的核心轉發,開啟/etc/sysctl.conf這個檔案,取消掉 net.ipv4.ip_forward=1 這一行的註釋.
然後執行
sudo sysctl -p
使修改後的檔案配置立即生效。
5、開啟NAT轉發,讓虛擬專用網內網192.168.0.1/24這些使用者通過192.168.1.81的IP地址進行上網,相當於把本機做成了一個路由器,原理和分享Wifi上網一樣,只需執行下面一句話就夠了
sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
6、開啟我們的PPTP服務
sudo service pptpd restart
好了,現在一個普通的PPTP服務端已經搭建完畢,現在可以讓內網的裝置設定這臺Ubuntu電腦的地址為PPTP伺服器的地址進行普通的虛擬專用網上網了,你可以看到你的外網地址已經變成了這臺Ubuntu電腦的地址。同時,如果你使用tcpdump監控ppp0這塊虛擬網絡卡,會看到很多192.168.0.x的資料包進入
使用sudo tcpdump -i ppp0 可以看到客戶端發來的請求,均以192.168.0開頭的ip地址
下面可以像之前配置Wifi無線網絡卡那樣配置這塊虛擬網絡卡的PREROUTING表了,不過在這之前,你需要開啟ss-redir服務,我們這裡讓ss-redir監聽在12345埠,注意這裡的local_address必須是0.0.0.0,或者192.168.0.1,不然埠轉發沒法從別的網絡卡轉發過來,然後像下面一樣配置路由表,就實現了所有PPTP服務端流量都通過透明代理髮送到遠端SS伺服器了。如果你的SS伺服器放在國外,現在就相當於連線國內的PPTP伺服器,但是收到的資料卻來自國外的效果了,可以有效避免國外PPTP協議的虛擬專用網被G\F\W給掐斷事情的發生。
iptables -t nat -A PREROUTING -d 127.0.0.0/24 -j RETURN
iptables -t nat -A PREROUTING -d 192.168.0.0/16 -j RETURN
iptables -t nat -A PREROUTING -d 10.42.0.0/16 -j RETURN
iptables -t nat -A PREROUTING -d 0.0.0.0/8 -j RETURN
iptables -t nat -A PREROUTING -d 10.0.0.0/8 -j RETURN
iptables -t nat -A PREROUTING -d 172.16.0.0/12 -j RETURN
iptables -t nat -A PREROUTING -d 224.0.0.0/4 -j RETURN
iptables -t nat -A PREROUTING -d 240.0.0.0/4 -j RETURN
iptables -t nat -A PREROUTING -d 169.254.0.0/16 -j RETURN
iptables -t nat -A PREROUTING -p tcp -s 192.168.0.1/8 -j REDIRECT --to-ports 12345
同樣的方法適用於OpenV\P\N或者其他的虛擬專用網協議,親測有效,原理都是一樣的。
你還可以使用HAProxy對多個SS服務端進行負載均衡,然後通過單個虛擬專用網整合這些SS服務端,這一點是普通虛擬專用網做不到的,如果你在國外搭建一個虛擬專用網服務端,如果網路不好你就只能換個虛擬專用網連線了,而通過SS轉虛擬專用網的方式新增高可用和負載均衡,你的虛擬專用網就不會輕易掉線了,因為有多個SS伺服器同時提供服務。