2011年9月10日星期六

免費在AWS上架設L2TP/IPsec(一鍵安裝)


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次。所以比較要擔心的應該是網路流出量不夠 :)

25 意見:

小胖 提到...

感謝ㄉㄉ分享~

dragonjohn 提到...

感謝大大無私分享

匿名 提到...

LINUX AMI似乎不行
沒有IPSEC的指令?

shaolin 提到...

您好我這篇的環境是在 Ubuntu 10.04 LTS 上面,
您可能找一下別的 AMI (還滿多免費可以用的)

匿名 提到...

請問UBUNTU要怎登入上去啊?
我用PUTTY都失敗

shaolin 提到...

每一個image都不太一樣唷!
你可以搜尋看看你現在用的AMI是誰做的,
應該可以找到預設的帳號密碼是什麼

JAMES WORLD 提到...

我照著步驟操作

也使用 Ubuntu 10.04 LTS ~ iPhone 連不上去

嗚嗚嗚

shaolin 提到...

To JAMES,
您提供的訊息有點少,看不出是哪裡出問題
有試過電腦可以連線嗎?
或是其他裝置測試連線看看

或是ssh登入用 netstat -al 看看服務是不是已經有 listen 了

JAMES WORLD 提到...

您好:我是使用 AMI: bitnami-gallery-3.0.1-0-linux-ubuntu-10.04-ebs 的免費 Instances

照著你的步驟操作 ,測試後 ,結果 我的WIN 7 也連不上去 哈哈,ICMP 也開了 也是不行 ...

只能說電腦不精 ~ 只能靠 Google 照著步驟操作 >"<

想架L2TP 是因為之前架的 Amazon Web Services PPTP 突然不能連了 (T^T) 使用3G網路可以連 ~ 但用WIFI 不行

shaolin 提到...

bitnami系列我有用我的script試過,還滿正常的QQ
我沒有iphone,但有試過用ipad連線,3G和wifi都可以跑
ipod touch連wifi也連得上~

如果 netstat -al |grep l2f 有東西,
看看是不是系統防火牆先擋掉了

JAMES WORLD 提到...

我照著打上 netstat -al |grep l2f

上面寫 udp 0 0 *:l2f *:*

看不懂 ..呵呵

JAMES WORLD 提到...

我開的 PORT 有
ICMP ALL
22 (SSH)
80 (HTTP)
443 (HTTPS)
500
1701
1723
4500

shaolin 提到...

看起來像是服務有跑起來了,
防火牆的設定也正確~
不太確定發生了什麼事情,抱歉!

可以問一下您在 windows 上面跑有修改註冊檔嗎(如上文章),
需要改一下才能連唷!
其實您還可以在Security Groups把所有的port都打開看看,
我在測試階段曾經有發生過找不出原因把AWS那層防火牆全開就可以連了
提供您參考!

m85065 提到...

我現在的狀況是設定和防火牆都對
註冊檔也用了
結果還是不能連線
(WIN7 X64)

shaolin 提到...

剛剛我直接申請了一個新的 instance (請見下圖)
http://data.shaolin.tw/image/temp/aws_new_instance_info.png
登入後,直接執行
wget http://data.shaolin.tw/script/l2tp.sh
sudo sh l2tp.sh
完畢後,跑到管理介面設定 Security Groups。
然後就可以使用了耶! (請見下圖)
http://data.shaolin.tw/image/temp/aws_my_ip_check.png

m85065 提到...

我目前測試結果是可以連
但是非常不穩定
三不五時就會連線中斷

JAMES WORLD 提到...

我現在才回來看到這篇 ...
真的很謝謝您熱心的幫忙測試!!
照著你的步驟,也換成64位元的 ( 我原本是使用32位元 )
還是非常殘念的不行 (T^T)
我的技術不足 ... 但真的非常感謝你
我原本是用美國的AWS (加州) 後來換成日本的 但應該不是這原因
明天在來試試

m85065 提到...

似乎是學校路由器的問題
在家裡的XP連接很正常也很順
在學校不穩定+頻繁斷線

匿名 提到...

是不是不能用了?? 都連不上去T_T

shaolin 提到...

我現在還可以用耶,請問樓上是哪裡連不上?

匿名 提到...

可以用了~謝謝! 可能我不是ubuntu的關係吧 ~用原著那個CentOS / Fedora 可以跑~ 之後再改掉登入帳號密碼

shaolin 提到...

抱歉我忘記文字說明了,這份 script 是 For Ubuntu 32bit and 64bit
我在程式碼開頭註解裡面有提到~

匿名 提到...

請問你有設定過openvpn以外的SSL VPN經驗嗎?

在某些限制比較嚴格的環境下(學校.醫院.公司),L2TP的穿透防火牆能力應該不會比走443的SSL VPN好。

而常見的openvpn需要在client端安裝軟體,這在使用上很不方便,尤其是公用電腦(網咖)不會給系統管理員權限。

所以我在找client 不需安裝軟體, 可以直接走ssl vpn的方法...........

這兩天找到有web-base 的 ssl-explorer...
但還沒實際測試過~~似乎也是open source

除了這之外是否有其他的方案可行呢??

PS 我也是輔大的 :P 謝謝你的script

匿名 提到...

http://www.youtube.com/watch?v=GH38WNcfegY
這裡頭提到的Adito,前身好像就是ssl-explorer
現在改叫OpenVPN ALS
http://en.wikipedia.org/wiki/SSL-Explorer:_Community_Edition

官網:http://sourceforge.net/projects/openvpn-als/
安裝教學 http://www.sohoadvisers.com/tutorials/adito-ssl-vpn/installing-adito-ssl-vpn

shaolin 提到...

上面的需求我通常都用ssh tunnel來解決,
ssh port 開在 80 或 443,
win環境下,下載免安裝的 putty 或 pietty 就可以使用
mac或ubuntu下只要一行指令就可以使用

amazon 在亞洲的伺服器跟台灣的連線速度都還滿快的
可以一試

張貼意見