2012年5月20日

利用DD-WRT OpenVPN "翻牆"

話說公司開始針對MSN Messenger,臉書等社交工具開始進行管制,從此小弟上班就少了一些"發洩"心中圈圈叉叉的地方啦!
這樣對心靈的健康會有極大的影響,是不可忍受的事實。
既然小弟先前是MIS,自然早就有了腹案,就是對岸同胞用來"翻牆"的絕頂兵器 - SSL VPN!
"恰巧"小弟家中的AP是TP-LinK WR1043ND,所以就準備開刷成DD-WRT之後,再加上OpenVPN功能開啟後,就成了跨越封鎖線的神兵利器啦!

前置動作是依照這篇DD-WRT Wiki進行設定,但設定完成後,卻怎麼也沒辦法從公司的電腦連回自家的NAS,更別提用家裏網路去紅杏出牆囉!
拜了Google大神好一段時間後,終於找到一位老外的設定,照著做之後果然就一切暢通無阻啦!
所以特別將這些設定紀錄下來,以備不時之需。

假設所有的網段如下:
Home LAN: 192.168.1.0/24
SSL VPN: 192.168.2.0/24
Office LAN: 10.0.0.0/16
Home WAN IP: 1.1.1.1

DD-WRT的Firewall command如下:
iptables -I INPUT 1 -p tcp --dport 443 -j ACCEPT
iptables -I FORWARD 1 --source 192.168.2.0/24 -j ACCEPT
iptables -I FORWARD -i br0 -o tun0 -j ACCEPT
iptables -I FORWARD -i tun0 -o br0 -j ACCEPT
iptables -t NAT -A POSTROUTING -s 192.168.2.0/24 -j MASQUERADE
(註: 因刷新版 DD-WRT V24 preSP2 Build 21061 於2013.05.30新增,嘗試後無效,保留此設定後退回Build 14896,則恢復正常)


OpenVPN Server設定如下:

註:進行設定前要先在Administration中將HTTPS反選,否則Port會衝突,OpenVPN Daemon就會無法正常啟動。若設定後仍有此現象發生,先重開Router一次後再確認OpenVPN Daemon是否正常啟動。



dev tun0
proto tcp-server
port 443 (預設是走UDP 1194,但多數公司都會封鎖非80, 443的埠,所以一定要改;但必須配合將DD-WRT管理界面中的HTTPS取消,否則OpenVPN一定起不來。
keepalive 10 120
comp-lzo yes
push "redirect-gateway def1"                 <====將default gateway轉向到DD-WRT上
push "route 192.168.1.0 255.255.255.0"  <====連上家中網段的Static Route
push "dhcp-option DNS 192.168.1.254" <====將DNS轉向到DD-WRT上,若需要連公司內部機器,建議不設此行。
server 192.168.1.0 255.255.255.0
client-to-client
duplicate-cn
dh /tmp/openvpn/dh.pem
ca /tmp/openvpn/ca.crt
cert /tmp/openvpn/cert.pem
key /tmp/openvpn/key.pem
verb 3
max-clients 5
management localhost 5001
# remote client LAN subnets
#push "route 192.168.0.0 255.255.0.0 net_gateway"(這部份設定是供Client端可連Office本地資源的路由,尚未啟動,仍待測試中)

OpenVPN的Client設定如下:
client
dev tun0
proto tcp
remote 1.1.1.1 443
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
ns-cert-type server
comp-lzo
verb 3

連上後測一下tracert -d 168.95.1.1,確認走VPN tunnel無誤。
這樣上班時就用Openvpn client撥接上家裏的SSL VPN Server就大功告成啦!


除非公司用L7 Firewall進行Deep scan,不然的話,就算要過proxy,OpenVPN的Client端也能應付自如。若是長駐對岸的台幹,一樣可以在台灣的老家啟動OpenVPN Server後,再以SSL VPN方式連回來"翻牆"!

若是設定完之後沒辦法連線,試著檢查一下DD-WRT上的OpenVPN Daemon設定吧。
以SSH/Telnet連上DD-WRT後,先以底下的指令檢查OpenVPN的Daemon是否有啟動?
ps | grep openvpn
若沒有看見openvpn的服務正常啟動的話,先用底下的指令去檢查log中有無關於OpenVPN的錯誤訊息。
cat /var/log/messages | grep openvpn

最後,用以下指令確認防火牆有開啟HTTPS (TCP 443 Port)。
iptables -L |grep https
有出現的話就表示防火牆設定正確。



8 則留言:

  1. 你好!
    想請教您幾個問題,因為最近想購入AP,
    所以找尋了幾個相關的文章,
    輾轉看到這篇文章,
    因為想要AP有openvpn 伺服器的功能
    但是又對相關知訊不了解,所以我的問題是:

    1. 不知道這篇文章所說的openvpn
    是指在本機上架設openvpn 伺服器好讓電腦可以透過WR1403ND 當跳板翻牆嗎?

    2. 依我這幾天惡補資訊所得到的結果
    只要刷DD-WRT韌體就有openvpn 這個項目,我並不了解openvpn 指的是可以把WR1403ND當作伺服器,
    或是WR1403ND會再指向另一個openvpn 伺服器 ?

    3. 如果以上動作是把WR1403ND刷成openvpn 伺服器
    那請問下列這個網站所做的動作也是把AP刷成openvpn 伺服器囉? " http://micbase.com/tp-link_wr-941n_use_dd-wrt_connect_openvpn/ "

    以上! 因為我想自己架個openvpn 伺服器 然後手機網路再走自己架的proxy (openvpn 伺服器)

    真的很抱歉問了那個多問題XD 也感謝你的回答!!

    回覆刪除
    回覆
    1. 抱歉啊,剛換公司所以遲了半年才發現您的問題,不曉得您的疑惑解決了沒?

      基本上DD-WRT中內附的OpenVPN是可當伺服器(提供遠端使用者登入),也可以當客戶端(連到Internet其他VPN服務提供者)。

      前者的用途多半用來建立Site-to-Site VPN(兩個遠端辦公室內網透過Internet互連,但Internet無法直接存取兩端內網)或是提供外部使用者連回內網的管道。這篇的用法算是反向應用,適用在遠端使用者打算透過自架的DD-WRT OpenVPN伺服器進行翻牆,所以DD-WRT一定要位在未被封鎖的地區,如:台灣。

      後者的用途則是提供DD-WRT內網的使用者在連外網時,不直接由DD-WRT連Internet,而是透過預先建立的Tunnel連到指定的VPN服務提供者,再向外連出。適用在於自架的DD-WRT位在封鎖區內,VPN服務提供者位於未被封鎖的地區。
      您的問題3內的連結就是後者的應用,因為這麼做的好處是,只要處在這台DD-WRT的內網下,就可以透過Tunnel,自動"翻牆"而省去用OpenVPN client連線的程序。

      刪除
  2. 您好
    小弟完全是新手一名,請問可否詳細講解一下dd-wrt內的控制台應該怎樣設定?
    手上只有android裝置沒有電腦請問有沒有辦法能完成設定調整?
    我也是刷了21061這版就是不知道ip網段及證書要怎樣設定建立…
    希望您能抽空指導一下做福大眾,謝謝您。

    回覆刪除
    回覆
    1. 只有Android裝置的話,沒辦法建立OpenVPN所須的憑證。目前OpenVPN內附的指令只支援Windows跟Linux兩種作業系統。除非您能利用其他工具產生必要的憑證,否則就沒辦法進行設定。
      IP網段其實重點只有一個,就是SSL VPN用的網段跟內網用的網段不要用同一組(以本文使用TUN設定走路由模式而言,若是改成TAP走橋接模式,理應可用同段IP,但我不曾試過)。
      至於詳細說明,可參考底下網址:
      http://www.dd-wrt.com/wiki/index.php/VPN_(the_easy_way)_v24%2B

      刪除
  3. 好吧那我再想想辦法建立憑證吧,謝謝您的回覆。

    回覆刪除
  4. 請問
    (1)DD-WRT實體網址是否為192.168.1.254
    (2)Server側,其中"server 192.168.1.0 255.255.255.0" 為何不是192.168.2.0?

    回覆刪除
  5. dev tun0
    proto tcp-server
    port 443 (預設是走UDP 1194,但多數公司都會封鎖非80, 443的埠,所以一定要改;但必須配合將DD-WRT管理界面中的HTTPS取消,否則OpenVPN一定起不來。
    keepalive 10 120
    comp-lzo yes
    push "redirect-gateway def1" <====將default gateway轉向到DD-WRT上
    push "route 192.168.1.0 255.255.255.0" <====連上家中網段的Static Route
    push "dhcp-option DNS 192.168.1.254" <====將DNS轉向到DD-WRT上,若需要連公司內部機器,建議不設此行。
    server 192.168.1.0 255.255.255.0
    client-to-client
    duplicate-cn
    dh /tmp/openvpn/dh.pem
    ca /tmp/openvpn/ca.crt
    cert /tmp/openvpn/cert.pem
    key /tmp/openvpn/key.pem
    verb 3
    max-clients 5
    management localhost 5001
    # remote client LAN subnets
    #push "route 192.168.0.0 255.255.0.0 net_gateway"(這部份設定是供Client端可連Office本地資源的路由,尚未啟動,仍待測試中)
    是放在哪裡呢?

    回覆刪除

本部落格版權宣告

創用 CC 授權條款
自由人、自由事Freeman Lee製作,以創用CC 姓名標示 4.0 國際 授權條款釋出。