OpenWRT 路由配置技巧


 

  隨着最近 Google 在國內已經完全無法訪問,使得通過 VPN 訪問網絡的需求更加強烈,本文介紹的方法可以使一個普通的路由具備穩定連接 VPN 的能力,並能夠根據目標訪問網站選擇國內外線路,從而得到一個既沒有限制,也不會影響速度的 Wifi 環境,連接到這個網絡的設備不需要任何配置即可安全上網,完全感覺不到任何不便。

  chnroutes 路由表

  這個路由表集中了所有分配到中國大陸的 IP 段,根據 http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest 每天自動更新,可使得在訪問國內地址時不經過 VPN。

  想想如果能夠讓家里的路由直接連接 VPN,在家連接 WiFi 的所有設備直接達到Fan牆的效果,應該很 Cool,所以最近在某寶整了一個 Netgear WNDR3800 二手路由回來,先后分別在 DD-WRT 和 OpenWRT 成功配置 VPN + chnroutes,最后還是選擇了 OpenWRT。

  DD-WRT vs OpenWRT

  關於 DD-WRT 和 OpenWRT,我選擇 OpenWRT 主要因為 DD-WRT ROM 中集成的軟件太多,絕大多數用不到,要配置 jffs2 來保存腳本文件,一般配置則保存在nvram中,而且無線較不穩定,5G頻段常搜索不到(當然可能是我這個路由器型號的支持問題)。OpenWRT 的配置文件語法統一,配置都存儲在文件系統中,且 ROM 本身僅集成了必備組件,非常小,可以只安裝需要的東西,WEB管理界面也是可選安裝,簡潔強大,經過若干天的使用一直比較穩定。

  配置

  已配置好 OpenWRT 上網的童鞋們可以直接跳過 1.刷 ROM2.初始配置

  1.刷 ROM

  a.首先確定你的設備可以被 OpenWRT 所支持(到這里查看支持的設備列表:http://wiki.openwrt.org/toh/start),然后到這里下載編譯好的 ROM:http://downloads.openwrt.org/ 。最新的 stable 版本是 attitude_adjustment(12.09),我下載的是 trunk 版本。

  b.在 OpenWRT 官網找相應設備的 Wiki 頁面查看刷機方法,一般都是在路由器官方Web固件升級頁面直接刷入(我的 WNDR3800 Wiki頁面是:http://wiki.openwrt.org/toh/netgear/wndr3800)

  2.初始配置

  a.路由器啟動后,有的型號沒有安裝 Wifi 模塊,需要先用網線連接到 LAN 口,本機 IP 配置為靜態 192.168.1.x,然后 telnet 到 192.168.1.1,更改 root 密碼,然后 ssh 連入,參考:http://wiki.openwrt.org/doc/start#configuring.openwrt

OpenWRT 路由配置 PPTP VPN + 斷線自動重連 + chnroutes國內路由表

  b.配置 WAN 口,讓路由連上 Internet,參考:http://wiki.openwrt.org/doc/howto/internet.connection 。

  比如要配置 PPPoE:

uci set network.wan.proto=pppoe
uci set network.wan.username='yougotthisfromyour@isp.su'
uci set network.wan.password='yourpassword'
uci commit network
ifup wan

  c.安裝 LuCI Web 管理界面並設置開機自動啟動,參考:http://wiki.openwrt.org/doc/howto/luci.essentials

opkg update
opkg install luci
/etc/init.d/uhttpd start
/etc/init.d/uhttpd enable

  d.瀏覽器輸入路由器 LAN 側 IP(多為192.168.1.1),進行 Wifi 等配置

OpenWRT 路由配置 PPTP VPN + 斷線自動重連 + chnroutes國內路由表

OpenWRT 路由配置 PPTP VPN + 斷線自動重連 + chnroutes國內路由表

  3.配置 DNS

  a.創建 /etc/config/sec_resolv.conf

vim /etc/config/sec_resolv.conf

  填入以下 DNS Servers:

nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 208.67.222.222

  b.編輯 /etc/config/dhcp

vim /etc/config/dhcp

  找到 option resolvfile 選項,替換為:

option resolvfile '/etc/config/sec_resolv.conf'
  4.配置 PPTP

  a.安裝 ppp-mod-pptp

opkg updateopkg install ppp-mod-pptp

  如果需要 LuCI 支持(推薦):

opkg install luci-proto-ppp

  b.配置 vpn 接口,編輯 /etc/config/network 文件,應該已經有以下內容(如果沒有,需要插入),並配置里面的 server、username 和 password:

config 'interface' 'vpn' 
option 'ifname' 'pptp-vpn'
option 'proto' 'pptp'
option 'username' 'vpnusername'
option 'password' 'vpnpassword'
option 'server' 'vpn.example.org or ipaddress'
option 'buffering' '1'

  c.進入 Network -> Firewall ,把 vpn 加入 wan zone,效果如圖:

  d.進入 Network -> Interfaces ,此時應該已經可以看到 VPN Interface 並可以連接,效果如圖:

  e.此時在本機 traceroute www.google.com,應該能得到類似以下的結果:

FL-MBP:~ fatlyz$ traceroute www.google.com 
traceroute: Warning: www.google.com has multiple addresses; using 74.125.239.113
traceroute to www.google.com (74.125.239.113), 64 hops max, 52 byte packets
1 fc_r0.lan (192.168.7.1) 2.266 ms 0.999 ms 0.946 ms
2 10.7.0.1 (10.7.0.1) 189.259 ms 187.813 ms 188.368 ms
3 23.92.24.2 (23.92.24.2) 189.847 ms 190.489 ms 188.939 ms
4 10ge7-6.core3.fmt2.he.net (65.49.10.217) 188.508 ms 192.216 ms 202.863 ms
5 10ge10-1.core1.sjc2.he.net (184.105.222.14) 195.695 ms 195.691 ms 284.242 ms
6 72.14.219.161 (72.14.219.161) 189.196 ms 192.287 ms 193.220 ms
7 216.239.49.170 (216.239.49.170) 192.496 ms 188.547 ms 189.881 ms
8 66.249.95.29 (66.249.95.29) 190.125 ms 190.335 ms 190.026 ms
9 nuq05s01-in-f17.1e100.net (74.125.239.113) 189.804 ms 190.556 ms 190.242 ms

  可以看出,其中第二跳是 VPN 的網關,而 traceroute www.baidu.com 的話第二跳應該也是同樣的結果。

  這時已經可以訪問 Google, Baidu 等國內外的站點了。

  5.配置 chnroutes

  a.到 chnroutes 項目的下載頁面:http://chnroutes-dl.appspot.com/ 下載 linux.zip,解壓

  b.把 ip-pre-up 重命名為 chnroutes.sh,打開編輯,在 if [ ! -e /tmp/vpn_oldgw ]; then 前插入以下代碼,以避免 ppp 連接腳本重復執行導致重復添加路由表項:

if [ $OLDGW == 'x.x.x.x' ]; then    exit 0
fi

  其中 x.x.x.x 是 VPN 的網關,可以先本機連接上去之后查看一下網關地址。

  c.ssh 連接到路由器,執行以下命令:

cd /etc/config/
mkdir pptp-vpn
cd pptp-vpn
vim chnroutes.sh

  在 vim 中把編輯好的 chnroutes.sh 粘貼進去(當然也可以通過 ssh 直接把 chnroutes.sh 文件傳過去,或者上傳到某個地方再 wget 下載)

  執行以下命令,設置權限為可執行:

chmod a+x chnroutes.sh

  d.用 vim 編輯 /lib/netifd/ppp-up 文件:

vim /lib/netifd/ppp-up

  在 [ -d /etc/ppp/ip-up.d ] && { 這一行前插入以下內容,確保 ppp 連接腳本能夠被執行:

sh /etc/config/pptp-vpn/chnroutes.sh

  e.重啟路由,啟動好之后,進入 LuCI 查看接口狀態,等 WAN 和 VPN 都連接成功后,ssh進去,執行 route -n | head -n 10 ,效果應該類似這樣:

root@FC_R0:/etc/config# route -n | head -n 10 
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.7.0.1 0.0.0.0 UG 0 0 0 pptp-vpn
1.0.1.0 58.111.43.1 255.255.255.0 UG 0 0 0 pppoe-wan
1.0.2.0 58.111.43.1 255.255.254.0 UG 0 0 0 pppoe-wan
1.0.8.0 58.111.43.1 255.255.248.0 UG 0 0 0 pppoe-wan
1.0.32.0 58.111.43.1 255.255.224.0 UG 0 0 0 pppoe-wan
1.1.0.0 58.111.43.1 255.255.255.0 UG 0 0 0 pppoe-wan
1.1.2.0 58.111.43.1 255.255.254.0 UG 0 0 0 pppoe-wan
1.1.4.0 58.111.43.1 255.255.252.0 UG 0 0 0 pppoe-wan

  其中 Destination 為 0.0.0.0 的是默認路由,網關為 VPN 網關,意味着默認流量都經過 VPN,而以下的條目則把目的為國內的網段都指向了 ISP 提供的網關。

  至此 PPTP VPN 和 chnroutes 已經配置完畢。

  6.配置 VPN 斷線自動重連

  a.創建 /etc/config/pptp-vpn/status-check.sh:

vim /etc/config/pptp-vpn/status-check.sh

  在 vim 中粘貼以下內容(此腳本檢測 VPN 連接狀態,並在斷線后會斷開 WAN 和 VPN 接口,10秒后重新連接 WAN,並在 30 秒后重連 VPN):

#!/bin/sh
if [ -f "/tmp/vpn_status_check.lock" ]
then
exit 0
fi
VPN_CONN=`ifconfig | grep pptp-vpn`
if [ -z "$VPN_CONN" ]
then
touch /tmp/vpn_status_check.lock
echo WAN_VPN_RECONNECT at: >> /tmp/vpn_status_check_reconn.log
date >> /tmp/vpn_status_check_reconn.log
ifdown vpn
ifdown wan
sleep 10
ifup wan
sleep 30
ifdown vpn
sleep 10
ifup vpn
sleep 40
rm /tmp/vpn_status_check.lock
else
date > /tmp/vpn_status_check.log
fi

執行以下命令,設置權限為可執行:

chmod a+x /etc/config/pptp-vpn/status-check.sh

  b.進入LuCI 的 System -> Scheduled Tasks 填入以下內容,並保存:

*/1 * * * * /etc/config/pptp-vpn/status-check.sh

  以上實際上是編輯了 cron 配置,cron 每分鍾運行檢測 / 重連腳本,重啟 cron:

/etc/init.d/cron restart

  c.靜待幾分鍾,查看 /tmp 目錄,應該能看到 vpn_oldgw 和 vpn_status_check.log 文件,查看 vpn_status_check.log 文件,可以看到最近一次檢測 VPN 連接狀態的時間。

root@FC_R0:/tmp# ls vpn*
vpn_oldgw vpn_status_check.log
root@FC_R0:/tmp# cat vpn_status_check.log
Tue Jul 15 00:04:02 HKT 2014
root@FC_R0:/tmp#

  你可以在 LuCI 中斷開 VPN 接口,在接下來的4-5分鍾,觀察 WAN 和 VPN 的重連情況。

  d.分別 traceroute www.google.com 和 www.baidu.com ,觀察第二跳的地址:

FL-MBP:~ fatlyz$ traceroute www.google.com | head -n 3
traceroute: Warning: www.google.com has multiple addresses; using 74.125.239.115
traceroute to www.google.com (74.125.239.115), 64 hops max, 52 byte packets
1 fc_r0.lan (192.168.7.1) 2.161 ms 0.912 ms 0.895 ms
2 10.7.0.1 (10.7.0.1) 193.747 ms 187.789 ms 289.744 ms
3 23.92.24.2 (23.92.24.2) 259.323 ms 354.625 ms 408.535 ms
FL-MBP:~ fatlyz$ traceroute www.baidu.com | head -n 3
traceroute to www.a.shifen.com (180.76.3.151), 64 hops max, 52 byte packets
1 fc_r0.lan (192.168.7.1) 1.190 ms 0.984 ms 0.731 ms
2 58.111.43.1 (58.111.43.1) 20.616 ms 38.822 ms 18.484 ms
3 183.56.35.133 (183.56.35.133) 20.056 ms 52.353 ms 87.841 ms

  可以看出,已成功對國內外的目標地址進行了路由選擇。

  至此,OpenWRT 路由的基本配置、PPTP VPN、chnroutes 和自動重連已經配置完成。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM