GRE / IPIP Tunnnel

#GFW促進學習系列# 假如有多個VPS,那麼將這些VPS連接起來的最佳方式是 GRE / IPIP tunnel Tunnel VPS A: 假設 IP 1.2.3.4 ip tunnel add tunnelName mode gre remote 2.3.4.5 ip addr add dev tunnelName 192.168.20.1/24 ip link set dev tunnelName up VPS B: 假設 IP 2.3.4.5 ip tunnel add tunnelName mode gre remote 1.2.3.4 ip addr add dev tunnelName 192.168.20.2/24 ip link set dev […]

Continue reading

Linux 策略路由與多 VPN 並存最佳實踐

#GFW促進學習系列 以在路由器上配置為例. 需要 iproute2, 部分設備 (如某些 ddwrt 路由固件默認並不支持, 可能需要自己編輯安裝 iproute2 包). 各個腳本路徑與所用設備及系統有關, dd-wrt 固件參考 Wiki) Startup 腳本 在設備 startup 腳本里, 創建策略路由的 ip rule 規則 ip rule add from all fwmark 0x1/0x1 table 1 prio 1 ip rule add from all fwmark 0x2/0x2 table 2 prio 2 ip rule add from all table 3 prio 3 […]

Continue reading

VPN翻牆與P2P下載

#假裝懂技術 #GFW促進學習 在路由器上部署了VPN Client和chnroutes後,連接到國外VPS的VPN Server後,整個區域網內所有設備能夠透明翻牆,但是一些P2P軟件會遇到問題。 P2P軟件需要監聽固定埠,並且需要外網的機器能夠主動連接到運行P2P軟件內網機器。方法是用路由器的「埠映射」功能,將公網IP的某些埠映射到內網某個機器上。這是通過iptables的DNAT實現的: 假設在路由器管理界面中將10400-10499埠映射到192.168.0.4,路由器會添加下面的iptables規則(由於WAN IP通常不是固定的,路由器會在ppp撥號或DHCP獲得公網IP後動態添加這些規則): iptables -t NAT -A PREROUTING -d -p tcp –dport 10400:10499 -j DNAT –to 192.168.0.4 iptables -t NAT -A PREROUTING -d -p udp –dport 10400:10499 -j DNAT –to 192.168.0.4 但是部署OpenVPN和chnroutes後,國外的IP就不能主動和內網機器建立連接了(即使已經按照上面方法在路由器上開啟了埠映射),因為這時國外IP看到的是VPS的IP,不是路由器的公網IP。 要使路由器部署VPN時仍然支持內網P2P下載和其它需要外網埠的應用,需要在VPS和路由器上同時增加新的iptables DNAT規則。 首先,需要知道路由器所使用的OpenVPN客戶端證書的(X509) common name,這個common name是在生成證書時指定的,OpenVPN easy-rsa創建證書時默認使用文件名作為common name。可以在證書crt文件中查看其common name [email protected]:/etc/openvpn/easy-rsa/keys# cat client-common.crt Certificate: Data: Version: 3 (0x2) Serial […]

Continue reading

架設區域網翻牆網關方法

任一台linux機器都可以,不需要配置路由器。 假設LAN網段是192.168.1.0/24 首先在192.168.1.A上正常部署OpenVPN Client和chnroutes,這樣本機就可以翻牆了 然後用下面命令(可以放在啟動腳本rc.local里) echo 1 > /proc/sys/net/ipv4/ip_forward # or below #sysctl -w net.ipv4.ip_forward=1 # or edit /etc/sysctl.conf, # add (or edit) the following line # then run “sysctl -p” (permanant) #net.ipv4.ip_forward=1 #可以加-o tun0條件,在開啟chnroutes時這使得LAN內機器能夠受益於ICMP Redirect,對國內IP直接路由到原始網關 #但會在某些綁定IP和MAC的網絡環境下遇到問題。 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE 就可以了了。區域網內的其它機器只需要將網關改為192.168.1.A,就可以透明翻牆並且國內外分流 此方法適用於公司內自己機器架設VPN翻牆然後分享給同事。

Continue reading

OpenVPN丟包率嚴重

在國外VPS上部署的OpenVPN。客戶端使用static key模式連接,可能因為沒有使用tls模式,埠一直沒有被封。但是長時間連接VPN後丟包率很高,超過30%,有時甚至達到80%。懷疑GFW干擾。 驗證方法很簡單:我的VPS有兩個同一網段IP,A.B.C.67和A.B.C.68,OpenVPN監聽前者埠 ping A.B.C.67 丟包率為0,正常。 ping A.B.C.68 丟包率非常高,干擾嚴重 路由中A.B.C.67是直連的,A.B.C.68走的VPN。 結論是GFW選擇性丟棄了OpenVPN的數據包。 —- VPN是我唯一選擇的翻牆手段,配合第三方固件路由器、dnsmasq、chnroutes和策略路由可以達到最佳效果:LAN所有設備透明翻牆、國內外IP分流、支持CDN加速和P2P下載。這些是其它翻牆方式很難實現的。

Continue reading

route, nat, iptables 網絡,路由和防火牆

#GFW促進學習系列 Route 查看路由表: #linux: $route -n $ip route list #Windows: >route PRINT 一個典型的LAN里機器的路由表:(區域網網段是192.168.0.1/24) # route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0 169.254.0.0/16是RFC定義的特殊link-local地址。 路由表的策略是: 當需要向某個IP發送數據時,將目標IP地址和路由表中每條路由項的掩碼(Genmask) […]

Continue reading

DD Wrt 路由器級VPN翻牆方案

最近終於抽出時間, 在家裡的dd wrt路由器上配置了VPN ,實現區域網內所有設備透明翻牆。這裏稍微整理一下。 (註:以下內容適用於使用PPPoE協議連接公網的網絡環境;並且要求dd wrt路由器具有jffs空間和USB口) 基本方案還是chnroutes的思路,通過添加國內IP路由表實現國內外IP分流:國內IP直接走ISP,國外IP全部走VPN。之所以沒有用autoddvpn方案是因為autoddvpn的graceMode並不完美,它對GFW的關鍵字封鎖(包括url query string關鍵字封鎖和深度包檢測)無能為力,仍然會被reset。而且現在大部分國外IP通過VPN訪問還能起到加速作用(我用的是Linode東京機房自己架設的OpenVPN) 準備工作:開啟路由器jffs空間;掛載USB存儲設備到/opt;然後根據這裏說明安裝Optware組件。 安裝配置OpenVPN 請不要使用dd wrt的Web界面,而是手工將配置文件和證書放到路由器上,然後通過命令行啟動OpenVPN。配置文件和證書可以放在/jffs或/opt目錄里。 創建dd wrt自啟動文件 /jffs/etc/config/openvpn.startup,設置許可權為+x #!/bin/sh openvpn –config /jffs/openvpn/client.conf 在DD Wrt Web界面 Administration – Commands里添加並保存iptables防火牆規則 # allow OpenVPN iptables -I FORWARD -i br0 -o tun0 -j ACCEPT iptables -I FORWARD -i tun0 -o br0 -j ACCEPT iptables -t nat -A POSTROUTING -o tun0 -j […]

Continue reading