雲端:DD-WRT 與 VPN

以為「雲端」這兩個字誰都能用嗎?
現在連賣房子的代銷公司或建商的廣告都很喜歡掛上雲端…
但我想那些人之中大部份連ISP是啥意思都不懂吧…
某些銷售員可能連EMAIL都不會用…
嘛..賺錢才是他們的目的..那些小事他們才不想去花時間了解…

那…雲端是怎麼回事?
如果我想要….
1.使用手機在區網裡的電腦或NAS存取檔案,
2.使用RDP去操作虛擬機來養動物..
3.讓NAS將某些格式的影片轉碼串流到手機或平板播放…
4.使用EYE OS 讓手持設備當桌機來辦公打文件用…
5.丟3D模型檔給虛擬機去跑圖..
6.透過虛擬機操作CNC雕刻機或3D印表機..或查看進度?
7.在辦公室裝台PS3 然後用ps3netsrv連回家裡播放blu-ray.ISO
8.在辦公室內用PS VITA  PC遠端遊玩家裡的PS4遊戲…(PS4運算串流給VITA)..
9.監看IP攝影機..
10.自動定時備份另外一台NAS或電腦內的檔案…
11.在外面用手機拍照想直接讓家裡的印表機印出彩色相片…
12.將AP與SQL分配在不同的機器上來減低負擔與風險…

以上這些功能與服務如果都在同一區網內的話,根本都不是問題..
那麼…在外面呢?

以為裝個DROPBOX或是GOOGLE DRIVE 做同步存取就是雲端?
只是存取檔案,沒有運算,沒有硬體操作..算什麼雲端? 那只是網路磁碟而已…

VPN又是怎麼一回事?
VPN對於一般人來說是很陌生的,有聽過或有在用的,大多是在中國工作的台灣人,
因為要連台灣看想看的東西會被”長城”擋住..所以要用VPN來翻牆,
但我這篇文並不是要講翻牆…因為那太簡單了..許多二線品牌的AP都有內建支援..
且我也不想浪費時間去說明這網路上GOOGLE後一狗票資訊的東西..
我要做的VPN是要讓分隔兩地的不同網路給連結起來,像是在區網內的電腦設備一樣,
可以互相訪問、存取、操作、運算、串流…實現真正的「雲端」

為什麼要用VPN?
透過port的轉發或許可以達到某部份功能的需求,但我不想一直開那麼多port去設定,
電腦重灌要再設定,加了台或換了台設備也要再設定…那對我來說其實很麻煩…
開那麼多port..感覺就像是告訴大家,請快點來測我家的FIREWALL效能…

Client to Site 或 Host to Site 其實不夠用…
我不喜歡用Win-pc建vpn連線去連nas,
因為那除了一台PC佔一條連線與頻寬資源外,還要浪費Win-pc與nas的效能,
pc 跟nas 在讀取/寫入檔案以外,還要做加解密的動作。
如果NAS本身規格不夠高檔的狀況下,串流高清影片或BD原盤ISO會LAG到不行。
影音播放器或機上盒甚至ps3等…幾乎無法自建VPN連線…

只有在外面使用的NB或手持設備才適合用系統內建的Client to Server VPN連線…

最重要的是Server端後的設備無法連線到Client端後的設備…

Site to Site VPN 需要到什麼程度的網通設備?
VPN是很吃效能的..普通ARM CPU沒雙核心..別想跑得順..
商用等級的VPN專用機器價格不斐!
但買了高階設備只專門用來跑VPN Server 又有點浪費…
每個點買一台會直接讓口袋破洞…

asus的中高階 ap 其實都有內建 vpn Server ,後續的機種也有 內建 VPN Client ,
經過測試..PPTP vpn Client 的功能有些小問題外..因路由表的關係..沒辦法雙向存取,
OPEN VPN 又不支援多站點的連線
想要直接用asus/Merlin-WRT的AP 做為 site to site 的解決方案,還有段路。

效能足夠的中高階AP刷DD-WRT會因硬體NAT沒有開源碼的關係,
而需要讓CPU硬幹去跑VPN服務…經過實測結果,
傳檔速度約差一倍(下載7~8MByte/s 變成3~4MByte/s)
當AP用又兼跑VPN的話一定會嚴重影響到一般USER的WAN/INTERNET連線體驗…

用PC裝軟路由去跑VPN其實還比較可行…
問題在於使用環境的LOADING有那麼重嗎? 要多個位置放電腦也是個問題..
這台PC可是要24×365歐…一年下來的電費與廢熱還滿可觀的…
但如果是中大型企業的話…當然就都不是問題了…

經多方面考量下,我用ESXi去裝DD-WRT來跑VPN…
對現役的e3-1240V2來說..那點效能需求根本不是問題。


講了那麼多…開始動手吧 從相對簡單的PPTP VPN開始
接下來說明 用兩套DD-WRT 當 VPN Server / Client 做 site to site 的教學。
首先介紹一下我這邊用到的設備與環境:
—————————————————
A0.
亞太寬頻 雙向100m 光纖,IG040W ONU,1 STATIC IP + 8 PPPOE 共9線

A1.
ESXi 上運作的DD-WRT x86 Firmware: DD-WRT v3.0-r27858 std (09/28/15)
64 cpu X2 1~2400hz,256mb ram,256mb Flash,gbit網卡 X2,
IP:192.168.1.2 ,DHCP Server 關掉,WAN外網是用PPPoE撥號,
已購買授權65535連線數,使用DDNS:  AAA.no-ip.org,
用途是做為本地的工作用桌機、一般NAS的連外路由以及 PPTP VPN Server。
—————————————————
B0.
Hinet 100m/40m,P883 雙線供裝VDSL,8 PPPoE,目前未有FTTH線路可用

B1.
Netgear R6300v2.刷Firmware: DD-WRT v3.0-r27858 std (09/28/15)
gbit網卡,2T2R/802.11n 2.4/5.0 Ghz
IP:192.168.2.6,DHCP:101~110,使用DDNS:  CCC.no-ip.org,
WAN外網是用PPPoE撥號。
做為工作室內的電腦與無線設備的路由…
PS:不能跟Server端一樣的網段…

R6300v2可以刷DD-WRT或Merlin-WRT,網路上有許多教學..
Merlin-WRT因為是從官方的ASUS-WRT修改而來,所以有支援硬體NAT,
但PPTP VPN Client 端只能HOST(Client) To Site,
Client端後可以連線到Server端後的PC或NAS,但Server後的PC連不到Client端後.

因為是ARM雙核心,又能刷DD-WRT…入手價格又便宜..所以很適合用來測試
—————————————————

接下來..
PPTP VPN Server 端的設定…

1.基本設定>網路設定>路由器IP
閘道IP位置跟本地IP位置是一樣的
因為我這邊另外有兩台AP已經開了DHCP服務,所以DD-WRT是關掉DHCP的,
但並不影響VPN連線的使用…

2.基本設定>動態DNS
假設為:AAA.no-ip.org
這部份我就不說明了…很基本的東西

3.最重要的地方!!
基本設定>靜態路由
靜態路由表 >>新增一組 隔離 Client 端的 路由表..
以本文條件來說:目的地LAN=192.168.2.0/24 閘道:192.168.2.6
這個路由表的意義就是Server端後的PC 若要 連線到192.168.2.0/24的話
就要經過192.168.2.6這個閘道,
這閘道也就是B1/R6300v2 DD-WRT/VPN Clienter…

4.EO-IP通道
以本文來說不用管它…
之前看了一些人的教學,但因不懂他們的環境條件…盲目跟著照作..
後來才發現…這是給兩端都有固定實體IP用的…
而我這邊的固定實體IP已經用來架站了…

5.伺服器>VPN
開啟PPTP Server ,

勾選Broadcast support可以讓WIN-PC在網芳中直接看到對方網段的電腦…

MPPE加密的部份…一般來說為安全考量都會開啟…
關掉MPPE加密的話 傳輸速度可以提升1~2MByte/s..
如果有足夠的效能..還是開啟MPPE加密

MTU跟RTU值我都是用1436..實測用1450也沒啥速度上的差別…

伺服器IP:192.168.1.2
也就是這台DD-WRT的內網IP…
理論上是可以把路由設備與VPN設備 獨立開來…但這樣就失去意義..

用戶端IPs:192.168.1.31-40
這部份是Server 配給Client連進來後的IP,
因為考量到大部份都是使用Site to Site ,所以我是設定只有10組,
在外面的NB或手機要用PPTP VPN Client 連進來的數量其實並不多…

驗證方式:本地 User 管理 (CHAP Secrets)
CHAP-Secrets:就是帳號與密碼,格式為 user * password *
第二個使用者要在下一行…

6.系統安全>VPN Passthrough
除了PPTP Passthrough外其他都不用開啟…因為沒有用到.

7.系統管理>指令
於指令介面 / 指令 文字框內填入:

echo "begin-base64 644 -" > /tmp/ebt_ip.o.gz.u64 
echo "H4sIADwAAAACA5VWz28bVRD+dteON20KG9eq3BJUB21UVy1m2+RQRCO5cX5w" >> /tmp/ebt_ip.o.gz.u64 
echo "yMGHHpAQcr32Eq9wHMveIFAPNSkHDq7wIb1H5R+p0gpx7J8QtaH8EBfuSGbm" >> /tmp/ebt_ip.o.gz.u64 
echo "vbdh8whEHelp9ps3883Mm/ecPFhZXzUMA7EYsPEPAv5Ikc1BdUGgIt7CWSQl" >> /tmp/ebt_ip.o.gz.u64 
echo "i5ejFJY8B2VntjrAecIFPByyLUM2B4cjA43RGDveN6g4HJMD7CxeH9nvo5KT" >> /tmp/ebt_ip.o.gz.u64 
echo "XK9HNva9KsUxPo/fiKvyyMZ7N5hrmrgmVUxHcV0hrmm8OrK3FBfbJmC6FnyK" >> /tmp/ebt_ip.o.gz.u64 
echo "M92P4At7AUuPBsRZwHMPWBq+TXUOHBN5DJzZsg8T5uM8DnfHqHi4ZMHMmpjL" >> /tmp/ebt_ip.o.gz.u64 
echo "+7hWaCKNQW62CFzCy91rTgUW1VSg2gykXdZpwgae3FpDWeRap9oc6qeCPYH5" >> /tmp/ebt_ip.o.gz.u64 
echo "+6LqDZQnd0qeCyqPqWI4D5+vQzXHua6rXBvqTIsqlzzffS9LfiZpORc+y8Oh" >> /tmp/ebt_ip.o.gz.u64 
echo "oWYD/Dycgj90nWXqaUXkuE887B/bc1gRfGzL8YwdiBmniIf5TMU1hV+GjohZ" >> /tmp/ebt_ip.o.gz.u64 
echo "QwbLgsvGgcX+sd1K2A2aCe/xtzybH76fIdsNmtPv47Rr49muTfh9NbcU9kXd" >> /tmp/ebt_ip.o.gz.u64 
echo "V1W/WboLT8lvjIee6wR0ZtLOtbnOipgN4x8pBfN58L0zYl47Xh73HLbpdyR7" >> /tmp/ebt_ip.o.gz.u64 
echo "dEd21N1l31e78bwpXtTmqP14RjnyUXMS+2yXve9x5beBi7Q+vGKjQL1+655s" >> /tmp/ebt_ip.o.gz.u64 
echo "Oy5hF6fKx+a/bX9l8ARvIO/SuvwfXMn9gvX/+wun7LfDRtDpB4tr1XV8EfQ6" >> /tmp/ebt_ip.o.gz.u64 
echo "Qbv2ZdDrh1udxZulhdK8x86l/tebUd0nHfWkbsVfvaBdioKvIvnVrEd1lPx+" >> /tmp/ebt_ip.o.gz.u64 
echo "n+FG2Pl8S9q7zR5Km83A394o1f1w/iahrabYfwO5LN4aMKFwmVY10Z96wHiH" >> /tmp/ebt_ip.o.gz.u64 
echo "1mQi7hMb4LFNqfiUuOvAVYVjipElOXW+OY3vJwrOKz4rwfeB0jHfC+3sY74F" >> /tmp/ebt_ip.o.gz.u64 
echo "2UPXTPjlE37Mx/iOqi+WX8lvoPmxLGr1Hdj8VmR9mUR9qxpfK3W8vnjvrvo2" >> /tmp/ebt_ip.o.gz.u64 
echo "E37uCXmnE72y0B8XfHYCX5KLZYaKOiB9TtWdUmczqfHRm8GnJ/DpYhyr7c9x" >> /tmp/ebt_ip.o.gz.u64 
echo "cs/SoixYGk5reFLDZzQ8oeGM8OB3mBO/fwb99sh3F+M57Q7Ma3hVvyOBH9XC" >> /tmp/ebt_ip.o.gz.u64 
echo "bqmBsBNGNXop2+0AjXZQ72x3Y1irRa2wHyOO4BfXj4JebbMeNVrCtN3RjOLu" >> /tmp/ebt_ip.o.gz.u64 
echo "pUx5j1jPGFJ/p/QLpfdMqelHGGm6SEXSE1OyzzQtjzGtW4xpkLcZn5N98/6y" >> /tmp/ebt_ip.o.gz.u64 
echo "2i/y7InnutKc31T/qjAuKF1W+p7SfwMbOFhxAAkAAA==" >> /tmp/ebt_ip.o.gz.u64 
echo "====" >> /tmp/ebt_ip.o.gz.u64 
uudecode /tmp/ebt_ip.o.gz.u64 | gunzip -cd > /tmp/ebt_ip.o 

sleep 15 ; insmod ebtables ; insmod ebtable_filter ; insmod /tmp/ebt_ip.o & 
sleep 25 ; ebtables -I INPUT -i oet1 -p IPv4 --ip-protocol udp --ip-destination-port 67:68 -j DROP & 
sleep 5 ; ebtables -I OUTPUT -o oet1 -p IPv4 --ip-protocol udp --ip-destination-port 67:68 -j DROP &

>儲存啟動指令

這段程式碼是用來過濾Server端與Client端的通訊封包,
我是在參考別人的設定中偷師下來的,之前以為要搭是著EO-IP用,
但經實測..是在虛擬IP(10.x.x.x與172.16.x.x環境或是SITE TO SITE 的 OPENVPN下用的…

Server端設定結束…
儲存後重新開機…


Client端的設定
如果要當Client端的DD-WRT不在手邊或同個子網路話,
記得要先啟用DDNS,並開放從外部網路連進後台控制介面(最好開強制SSL連線)

1.基本設定>網路設定>路由器IP
閘道IP位置跟本地IP位置是一樣的…
記住..不能跟Server端一樣的網段…

2.最重要的地方!!
基本設定>靜態路由
靜態路由表 >>新增一組 隔離 Server 端的 路由表..
以本文的條件來說:目的地LAN=192.168.1.0/24 閘道:192.168.1.2
意義就是Client端後的PC 若要 連線到192.168.1.0/24(Server端後)
就要經過192.168.1.2這個閘道,
這閘道也就是A1 ESXI DD-WRT x86/VPN Server…

3.伺服器>VPN
啟用PPTP 用戶端

伺服器IP或DNS名稱:AAA.no-ip.org
也就是Server端使用的DDNS名稱..

遠端子網:192.168.1.0/24
也就是Server端的區網環境..

MPPE加密:如果Server端有勾選MPPE加密的話..
Client端預設是填:mppe required
我自己是設定成mppe required,no40,no56,stateless
這段指令的意思是.. 必需要有MPPE加密,不能是40位元,不能是56位元
不需所有封包都加密..
DD-WRT似乎只接受128位元的加密…

MTU跟RTU值:1436
比照Server端的設定..

NAT:啟用
Client後的PC或設備要透過DD-WRT的NAT轉換走VPN連線到SERVER端後..

帳號跟密碼:
就按照Server端的設定…

4.系統安全>VPN Passthrough
除了PPTP Passthrough外其他都不用開啟…因為沒有用到.

設定結束…儲存後重新開機…


等跑完開機程序後..到Server端的dd-wrt後台去看…

應該可以在 機器狀態>區域網路>connected pptp Clients 中
看到連線進來的 vpn Client (b1/r6300v2)/IP:192.168.2.6

如果沒有設定上的失誤..
例如PC上設定的IP與GATE不是走這台ROUTER /VPN SERVER…
Server端後的PC只要開啟網芳應該就可以看到Client端後的PC或NAS

若是有問題的話…
先從Server端DD-WRT後台的系統管理>指令 於指令介面 / 指令
去執行 PING 192.168.2.6 (R6300v2的IP)
看看有沒有回應…
再PING 其Client端後設備的IP,一步一步來找出問題點..

2015-10-21補充
追加網路上爬文到的,解決PPTP-VPN用戶端斷線後自動再連上的語法,
系統管理 > 指令,然後加入以下內容到指令框內,按下 “儲存啟動指令”

1
2
3
4
5
6
7
8
9
#!/bin/sh
"echo "PPTP Connection test"
while sleep 180
do
if ! ping -c 1 192.168.1.2; then
/tmp/pptpd_client/vpn stop
/tmp/pptpd_client/vpn start
fi
done

以上 指令 中的IP 192.168.1.2,為遠端 PPTP Server 的IP,
使用者可改為 PPTP VPN Server端後的其中一台電腦IP 或 分享器IP,
每180秒去PING一次,Ping不到的話…Client端VPN就會重啟。
如果設錯了IP..會讓Client端VPN不斷的關閉與重啟,所以請小心使用…

2015-10-29 補充
1.如果內網環境內有另外一台以上的 IP分享器/無線分享器/ROUTER
記得進分享器後台界面加入靜態路由
不然在這分享器後的PC或手機是無法經過VPN SERVER連到對面..
VPN CLIENT 端的環境也是一樣..

2.如果ISP的路由設定從ONU後連到骨幹時是VLAN包VLAN的方式..
會容易影響VPN的連線,例如我現在用的亞太…
從ONU出去後會先到10.X.X.X的機房再連到192.168.X.X的設備
才正式進到亞太的主機..所以即便我的區網是192.168.1.0/24
也可以PING到 192.168.2.1與192.168.2.5 (這兩台是亞太的設備)

3.最新一次的Client設備 用1151的G4400 裝ESXi跟我這邊VPN對連..
MPPE加密開啟的狀況下仍可以跑到近滿速…



之前的測試結果:
Client端是用ATOM N330 /DD-WRT x86連到 ESXi/E3-1240V2/DD-WRT x86

Transfer-Test_ddwrtx86-vpnclient-u000 Transfer-Test_ddwrtx86-vpnclient-u001 Transfer-Test_ddwrtx86-vpnserver-d000 Transfer-Test_ddwrtx86-vpnserver-d001 Transfer-Test_ddwrtx86-vpnserver-u001 Transfer-Test_ddwrtx86-vpnserver-u002 Transfer-Test_ddwrtx86-vpnclient-d000 Transfer-Test_ddwrtx86-vpnclient-d001

發表迴響