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

31 意見:

小胖 提到...

感謝ㄉㄉ分享~

John Wu 提到...

感謝大大無私分享

匿名 提到...

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 在亞洲的伺服器跟台灣的連線速度都還滿快的
可以一試

匿名 提到...

我用IPAD2可以连,但是断开后重新连就连不上去了,这个时候用 /etc/init.d/ipsec status 查看的结果是 1 tunnels up,也就是说断开后 tunnels并没有释放,这个时候再连的话就连不上去了。需要重新运行一遍 /etc/init.d/ipsec restart才可以,请问这个问题如何解决,谢谢

shaolin 提到...

對不起您的留言被 google 分類在垃圾留言,現在才看到!
我目前沒有碰到這種問題,請問 log 裡面有沒有可以參考的訊息呢?
如果真的解不出來,我可能會寫個小 script 定時檢查連線是否存在並和 status 做比對,如果連線和 status 數量對不上,就 restart 這樣~

HUUUUUU 提到...

借用標題請問一下,我看了2008年的文章,裡面教學使用wireshark擷取封包,擷取後的檔案存檔後,做修改還是正確的嗎?
又怎麼做修改?並且丟出去? 可以的話能繼E-MAIL跟我說嗎^^

shaolin 提到...

您好,其實你回在那篇文章下面我也看的到 XD

wireshark 的作用在於觀察和記錄,舉例來說,就好像對一場比賽做完整的紀錄,從記錄裡面你可以看到誰在幾分幾秒投了三分球,但是你去修改那份記錄,仍然改變不了該場比賽誰贏誰輸的事實~

五年級大叔的生活筆記 提到...

您好,以為所有的linux都可以使用,看完下面的討論才知道在ubuntu上跑的版本似乎是不能在Fedora上跑。我已經裡用fedora跑openvpn,再用你的方法安裝了L2TP,果然是跑不起來。

想請問,如果我要去安裝給fedora的版本,要怎麼做比較好?需要先移除嘛?還是直接再執行一次安裝程序就好?

謝謝你

shaolin 提到...

@Old K
文章中提到的對岸牛人有做 fedora 的版本:http://zeddicus.com/a-key-installation-package-l2tp,也許你可以試試看用那個版本重跑。稍微看一下一些關鍵設定檔在新建之前會先清除,應該可行。
fedora 用本篇的 script 應該是跑不起來,因為預設沒有 apt-get,所以很多基本的元素都沒有裝起來。

張貼留言