本文章來給各位同學詳細介紹關於linux中打造智能路由功能詳解,有需要瞭解學習的同學可進入參考。
所需裝置清單:
一台自由的主機
一台已經刷了OpenWRT的路由器
一根網線
一個2G的隨身碟
在此之前請確保你已經有了一台刷過OpenWRT的路由器,然後給路由器上電,通過網線直連,連線路由器:
telnet 192.168.1.1設定密碼:
passwd而後退出即可用SSH進行登入了:
exitssh root@192.168.1.1接著修改路由的無線配置,從而可以開啟Wifi:
vim /etc/config/wireless注釋掉option disabled 1一行,並設定Wifi的加密方式和密碼:
代碼如下 |
複製代碼 |
config wifi-device radio0 option type mac80211 option channel 11 option hwmode 11ng option path 'platform/ar933x_wmac' option htmode HT20 list ht_capab SHORT-GI-20 list ht_capab SHORT-GI-40 list ht_capab RX-STBC1 list ht_capab DSSS_CCK-40 # REMOVE THIS LINE TO ENABLE WIFI: # option disabled 1 config wifi-iface option device radio0 option network lan option mode ap option ssid OpenWrt option encryption psk2 option key 'password'
|
然後修改網路設定:
vim /etc/config/network注釋掉option ifname 'eth0'並增加WAN口設定,
代碼如下 |
複製代碼 |
config interface 'loopback' option ifname 'lo' option proto 'static' option ipaddr '127.0.0.1' option netmask '255.0.0.0' config globals 'globals' option ula_prefix 'fd48:f746:e8a5::/48' config interface 'lan' # option ifname 'eth0' option type 'bridge' option proto 'static' option ipaddr '192.168.1.1' option netmask '255.255.255.0' option ip6assign '60' config interface 'wan' option ifname 'eth0' option proto 'dhcp'
|
而後重啟路由,即可通過Wifi串連到路由器,此時將路由通過網線接入網路或者上級路由即可作為一個普通的路由器使用了。
reboot安全模式
如果期間由於IP地址配置錯誤等原因導致無法串連到路由器,可以進入路由器的安全模式進行恢複:
1、拔掉路由器電源
2、連結電源後使用牙籤不斷抽插路由器的reset按鈕,當路由器的指示燈開始快速閃爍就說明已經進入了安全模式
3、安全模式不會載入任何配置,因此還需要通過最初提到的方式,直連並通過telnet 192.168.1.1連線路由器
4、掛載root分區:mount_root
5、擦除先前的配置:firstboot
6、設定密碼:passwd root
7、重啟:reboot -f
而後就可以重新開始進行配置了,如果其中通過firstboot擦除配置的過程中遇到錯誤,可以通過在OpenWRT中重新刷機的方式解決。
準備隨身碟
我所用的路由只有2MB儲存空間,安裝OpenWRT之後,空間已所剩無幾,如果要安裝後續提到的OpenVPN等軟體,很明顯空間是不夠用的,但是我們可以通過路由器的USB介面使用隨身碟來做擴充。
我這裡給2G的隨身碟分了3個區,1G(primary, bootable, ext4)/500MB(primary, swap)/500MB(primary, ext4),分區完後對其進行格式化,就完成了隨身碟的準備工作,我是通過Mac中的Ubuntu虛擬機器進行下述操作的:
代碼如下 |
複製代碼 |
cfdisk /dev/sdb mkfs.ext4 /dev/sdb1 mkswap /dev/sdb2 mkfs.ext4 /dev/sdb3
|
隨身碟準備完畢後就可以在路由上安裝所需的軟體了:
代碼如下 |
複製代碼 |
opkg update opkg install kmod-usb2 kmod-fs-ext4 opkg install kmod-usb-storage opkg install block-mount reboot
|
接著重啟路由器,而後配置fstab實現隨身碟分區的自動掛載:
代碼如下 |
複製代碼 |
reboot vim /etc/config/fstab
|
修改如下配置:
代碼如下 |
複製代碼 |
config 'mount' option target /mnt/usb option device /dev/sda1 option fstype ext4 option enabled 1 config 'swap' option device /dev/sda2 option enabled 1 config 'mount' option target /mnt/home option device /dev/sda3 option fstype ext4 option enabled 1
|
而後重啟路由器後:
reboot這時候你就可以通過df -h看到分區已經自動掛載了:
代碼如下 |
複製代碼 |
df -h Filesystem Size Used Available Use% Mounted on rootfs 1.1M 632.0K 456.0K 58% / /dev/root 1.8M 1.8M 0 100% /rom tmpfs 14.1M 72.0K 14.1M 0% /tmp /dev/mtdblock3 1.1M 632.0K 456.0K 58% /overlay overlayfs:/overlay 1.1M 632.0K 456.0K 58% / tmpfs 512.0K 0 512.0K 0% /dev /dev/sda1 945.2M 11.0M 869.4M 1% /mnt/usb /dev/sda3 451.5M 2.3M 421.5M 1% /mnt/home |
接著執行如下操作:
代碼如下 |
複製代碼 |
mkdir /tmp/root mount -o bind / /tmp/root cp /tmp/root/* /mnt/usb -a umount /tmp/root rm -r /tmp/root
|
接著在opkg.conf配置中增加dest usb /mnt/usb,之後就可以將我們需要的OpenVPN安裝到USB中了:
代碼如下 |
複製代碼 |
vim /etc/opkg.conf opkg update opkg --dest usb install openvpn-openssl ln -s /mnt/usb/usr/lib/libssl.so.1.0.0 /usr/lib/ ln -s /mnt/usb/usr/lib/libcrypto.so.1.0.0 /usr/lib/ ln -s /mnt/usb/usr/lib/liblzo2.so.2 /usr/lib/ ln -s /mnt/usb/usr/sbin/openvpn /usr/sbin/
|
到此已經可以運行OpenVPN了:
openvpn --version由於OpenVPN安裝在USB中,所以後續啟動OpenVPN會遇到找不到tun模組的狀況,接下來配置tun模組:
代碼如下 |
複製代碼 |
ln -s /mnt/usb/lib/modules/3.10.4/tun.ko /lib/modules/3.10.4/ ln -s /mnt/usb/etc/modules.d/30-tun /etc/modules ln -s /mnt/usb/etc/modules.d/30-tun /etc/modules.d/ modinfo tun
|
接著我們關閉防火牆並看一下預設的一些轉寄和NAT規則:
代碼如下 |
複製代碼 |
/etc/init.d/firewall stop /etc/init.d/firewall disable iptables -L -n --line-number iptables -t nat -vnL POSTROUTING --line-number
|
可以看到此時預設是沒有任何轉寄規則的,因此此時串連到路由器的裝置是無法上網的,配置路由每次上電重啟時候自動載入tun模組並加入轉寄規則:
vim /etc/rc.local修改如下配置:
代碼如下 |
複製代碼 |
insmod tun iptables -I FORWARD -o tun0 -j ACCEPT iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE iptables-save
|
exit 0
到此為止你的路由器已經可以再次正常接入互連網了,下面我們需要配置OpenVPN並進行流量的智能分發,即配置哪些流量走VPN。
首先我們先來配置OpenVPN,這包含兩方面的配置,服務端和用戶端。
服務端
代碼如下 |
複製代碼 |
wget http://ipxcore.com/openvpn-debian-install.sh chmod +x openvpn-debian-install.sh ./openvpn-debian-install.sh iptables -I INPUT -p udp --dport 1194 -j ACCEPT iptables -I INPUT -p tcp --dport 1194 -j ACCEPT iptables -I INPUT -p udp --dport 443 -j ACCEPT iptables -I INPUT -p tcp --dport 443 -j ACCEPT iptables -A INPUT -i tun0 -j ACCEPT iptables -A FORWARD -i tun0 -j ACCEPT iptables -A FORWARD -o tun0 -j ACCEPT iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE iptables-save
|
用戶端
用戶端需要配置在服務端產生的憑證路徑,首先從伺服器下載打包的認證檔案:
代碼如下 |
複製代碼 |
scp root@100.100.100.100:/root/keys.tgz ./ tar -zxvf keys.tgz vim 703n.ovpn 703n.ovpn |
配置如下:
代碼如下 |
複製代碼 |
client remote 100.100.100.100 1194 dev tun comp-lzo ca /root/etc/openvpn/easy-rsa/2.0/keys/ca.crt cert /root/etc/openvpn/easy-rsa/2.0/keys/client1.crt key /root/etc/openvpn/easy-rsa/2.0/keys/client1.key route-delay 2 route-method exe max-routes 3888 redirect-gateway def1 verb 3
|
到此為止,通過當前的設定檔已經可以啟動OpenVPN並實現所有流量經過VPN轉寄了:
openvpn --config ./703n.ovpn為了實現流量的智能分發,同時也是為了節省VPN的流量,可以通過ChnRoutes實現,在Mac上下載ChnRoutes並執行:
python chnroutes.py -p android會產生兩個檔案vpnup.sh和vpndown.sh,將這兩個檔案頭部的alias刪除,並下載到路由器中之後,在設定檔底部增加如下設定:
代碼如下 |
複製代碼 |
script-security 2 up vpnup.sh down vpndown.sh
|
好了,這時候再次啟動OpenVPN,在Mac上分別traceroute下Baidu和Twitter就會發現,流量已經自動分發了。