開啟網路蟲洞穿越時空,活用 SSH Tunnel VPN

最近去了一趟上海考察,尋找創業發展的機會,但機會暫且不論,此行確實深深體會在中國的網路世界非常不一般。中國和諧的社會實在不容許影響善良風俗的事情存在,許多外來的邪惡,一一被偉大的長城擋在外面。不過,道高一尺魔高一丈,很多人很聰明,懂得翻牆方法,進出自如,多數人使用 Reverse SSH Tunnel(有興趣可參考筆者舊文『Reverse SSH Tunnel 反向打洞實錄』)建立一個臨時的 Proxy Server,讓網頁連線繞道而行。

不過,使用 Proxy Server 的方式只能讓特定的通訊協定能夠不受防火牆的阻擋,如果說要全面性的逃脫網路限制和監控,就要靠 VPN(Virtual Private Network)的方式。VPN 是什麼?簡而言之,就是與遠端的網路環境建立通道,使電腦彷彿真實身處於遠端的內部網路一般。所以 VPN 一旦建立成功,除了可以存取遠方的內部網路,當然亦可以將遠端網路當為中繼站再連到網際網路,換言之,就是可繞過防火牆的一切限制。至於 VPN 的建立方法有很多種, 但都不在本文範疇,這邊要說明的是如何用 SSH Tunnel 建立 VPN。

設定必要的環境變數後,直接執行以下的 Script,就可以和遠端 Server 建立 VPN 連線:
#!/bin/bash

# Local Network
NETWORK=192.168.16.0
GW=192.168.16.1

# Server IP Address
SERVER=123.123.123.123
# Server 對外的 Interface
SERVER_IF=eth0

echo "Creating Connection"
ssh -w 0:0 -f $SERVER "ifconfig tun0 10.0.2.1 netmask 255.255.255.252 pointopoint 10.0.2.2 ; echo 1 > /proc/sys/net/ipv4/ip_forward ;/sbin/iptables -t nat -A POSTROUTING -o $SERVER_IF -j MASQUERADE ;route add -net $NETWORK gw 10.0.2.2 dev tun0"

echo "Settingi local interface"
ifconfig tun0 10.0.2.2 netmask 255.255.255.252 pointopoint 10.0.2.1
route add -net ${SERVER%.*}.0/24 gw 10.0.2.1 dev tun0
route add $SERVER gw $GW
route add default gw 10.0.2.1 tun0
route del default gw $GW
註一:如果不能正確建立連線,請先確認 SSH Port(22) 是否已被防火牆阻擋。
註二:記得修改 /etc/resolv.conf 的 DNS 設定,有些網路是直接在名稱解析做阻擋(如:在中國的網路)。

後記

SSH 有高度的安全性,透過 SSH 建立 VPN,也可以多少避免網路被當下的網路提供者竊聽。

留言

  1. 不過,我曾聽過有人建的 VPN 通道,會發現它的公錀 id 不是原本創建的,也是被中間人換掉了。

    回覆刪除
  2. 沒有絕對安全的 Key,但只要夠長,還可以算是安全 :-P

    回覆刪除
  3. 真有趣,理論上換公鑰會被發現啊,莫非是利用漏洞算的key. 我是聽過有側錄設備,只對https有用,一台三百萬,但沒親眼見識過。

    回覆刪除

張貼留言

這個網誌中的熱門文章

有趣的邏輯問題:是誰在說謊

Web 技術中的 Session 是什麼?

淺談 USB 通訊架構之定義(二)

淺談 USB 通訊架構之定義(一)

Reverse SSH Tunnel 反向打洞實錄