Amazon Web Services (以下稱AWS)自從推出新使用者免費使用一年的方案,就想要在上面試架VPN。網路上有很多PPTP的教學,我個人比較偏好使用L2TP,而AWS上的Security Groups上只允許三種協定(ICMP、TCP、UDP),L2TP需要用到的ESP協定並不在這份白名單裡面。
事實證明呢!只是我不敢去嘗試而已,真正架起來後發現ESP是暢行無阻的。這也是我喜歡用L2TP的原因之一,一些防火牆設定會悄悄的被bypass。這篇提供了我在AWS成功架設的script,給大家方便一鍵架設。
首先,免費的AWS申請可能要到 什麼是雲端服務?阿正老師教你免費玩Amazon EC2雲端主機!(上篇) 和 阿正老師教你免費玩Amazon EC2雲端主機(下篇):主機實戰篇 請阿正老師教學一下了。
回到正題架設L2TP VPN server,對岸曾經有牛人寫了一個L2TP一鍵安裝包。因為AWS的網路環境跟一般的虛擬主機不太一樣,我修改了這份安裝包並且重新上傳,使用方法如下 (註:我的使用環境為 Ubuntu 10.04 LTS)
wget http://data.shaolin.tw/script/l2tp.sh
sudo sh l2tp.sh
MD5: 4c95d44c9d9c562093ca1003b0451782 l2tp.sh
原作者有提供圖文教學,如果不明白可以參考,這個版本跟原版的差別有下面三點:
1. 直接在安裝過程中設定帳號密碼
2. 根據AWS的網路環境修改/etc/ipsec.conf設定
3. 修正原作reboot後VPN不能正常運作的問題 ( /etc/rc.local )
其實我原本打算全部程式都用 apt-get 處理,卻一直架不起來,後來才發現有雷,所以改回來用可以正常運作的版本自己 make。
VPN server基本上已經架設完成,剩下的是要修改AWS的防火牆設定:在Security Groups允許UDP 500 1701 4500。為了連線方便,也順便去Elastic IPs選項免費申請一個固定ip吧!
最後就是實機連線測試了:
手機平板:
Android 手機(2.3.3),測試成功!
iPad(iOS 4.3.1),測試成功!
iPad 2(iOS 5 beta 7),測試成功!
Mac OS:
MacBook Air (Mac OS X Lion 10.7.1),測試成功!
Mac mini (Mac OS X Lion 10.7),測試成功!
Windows:
windows在這個架構下比較麻煩一點點,需要在註冊檔裡面允許NAT-T,
Win XP 請找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IPSec
Windows 7 (Vista) 請找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent
新增AssumeUDPEncapsulationContextOnSendRule,DWORD,值=2。
請參考 Microsoft Support 。
Windows XP,測試成功!
Windows 7,測試成功!
如果你仍然不能連線,在某些網路環境下會嘗試發ICMP的封包,所以在AWS security group需要允許ICMP連線,或許會對連線有幫助。
有些人覺得AWS上免費方案的I/O限制(一個月一百萬次)很少,如果拿來架VPN會不會有問題?前幾天剛好月初,我這邊的數據是使用了153MB的網路流量,而I/O requests只有806次。所以比較要擔心的應該是網路流出量不夠 :)