2009-11-09

OpenVPN--純架設-by ssl

參考網頁:
1-http://ssorc.tw/rewrite.php/read-265.html
2-http://justshark.blogspot.com/2006/05/openvpn.html
3-http://blog.roodo.com/candyz/archives/283944.html
4-http://theitdepartment.wordpress.com/2009/06/08/openwrt-openvpn-routed-lans/
5-https://forum.openwrt.org/viewtopic.php?id=6576

我的openvpn是上rpm-pbone上找的,因為懶的用source去做…就找fc8的rpm上來裝

裝好後,你會在/etc/openvpn底下發現easy-rsa的資料匣,進入裡面的2.0…

接著,我從上面的五個參考網頁上看出幾個重點:
  1. ssl的server與client憑證
  2. server與client的config設定有七、八成要一致
  3. 如果你server是在unix-like上架設的,那就不僅只是把vpn-service啟動就好了,還要做封包的forward跟nat
  4. 在server的config上定義client的routing-table要特別注意…沒必要把default route做到vpn-gateway上就別做…(我個人認為啦)
ok,以上四個重點也是建置的幾個步驟,接下來就一個一個來吧



[1. ssl的server與client憑證]
上面有說請到/etc/openvpn/easy-rsa/2.0底下,因為是新使用,所以,請編輯vars這一個檔,基本上,我只改檔尾的KEY_COUNTRY(註冊國碼[TW])、KEY_PROVINCE(註冊地區/省/州[Taiwan])、KEY_CITY(註冊城市[台灣沒幾個縣市])、KEY_ORG(註冊組織[你公司大名])、KEY_EMAIL(註冊郵件位址[])
接著,把vars存檔跳出,我建議接下來先執行clean-all([linux]#./clean-all),然後會有一些提示叫你做source([linux]#source ./vars),再來再做一次clean-all,然後這一次直接vars([linux]#./vars),就會跑出申請ssl憑證,然後其他的步驟就照參考網頁上說的做…但重點,這只是static auth的方式…如果要vpn over ldap或vpn over pam或vpn over mysql的話…又是另一種要上plugin的方法
[2. server與client的config設定有七、八成要一致]
server端(linux-fedora-8):
依參照網頁3上說的,把ca.crt/ta.key/dh1024.pem/server.* 從easy-rsa/2.0/keys下拷到/etc/openvpn,然後再把/usr/share/doc/openvpn-版本/sample-config-files/server.conf也拷到/etc/openvpn底下。
然後,編輯server.conf,主要要修改的地方有
  • local主機ip位置
  • port(我用預設1194)
  • proto(我用tcp)
  • dev(我用tun)
  • ca(指定ca.crt位置)
  • cert(指定server.crt位置)
  • key(指定server.key位置
  • dh(指定dh1024.pem位置
  • server ip mask(我用預設的10.8.0.0/24)
  • ifconfig-pool-persist ipp.txt(預設值)
  • push "route network mask"(這要點4要注意的,這是是修改client的routing-table,假設我要讓連上vpn的client可以存取或連線至vpn-server區域的某一塊的網路區域,就要增加這一行,例:讓client可以連至server網路區的192.168.111.0/24,那這一行就要寫成push "route 192.168.111.0 255.255.255.0")
  • push "dhcp-option DNS ip-address"(vpn的虛擬網卡也是要用dns的,但建議這dns要在包在routing-table會從vpn-gateway走的範圍)
  • client-to-client(讓使用vpn的client們可以各自相連繫)
  • keepalive a b(預設值a=10/b=120,每a秒會由server向client詢問有沒有活著,若長達120秒沒回應,則server會判定client已失聯)
  • tls-auth ta.key-address 0/1(第一引數是指定ta.key的位置,第二引數0->server使用/1->client使用)
  • comp-lzo(使用lzo的連線壓縮技術)
  • max-clients num(最大同時使用vpn連上server的人數)
  • user/group(在unix-like的os上,讓vpn的service用daemon來啟動,windows就不用了)
  • status status-log-file-address(設定vpn-status的記錄檔的位置)
  • log/log-append log-address(openvpn-service的記錄檔位置)
  • verb num(log等級)
若沒提到的,就使用預值狀態吧,接著,請先到firewall把tcp-1194的port開放,然後啟動openvpn(service openvpn start),如果啟動正確的話(service openvpn status),就會在網路狀況(netstat -tlunp)上看到1194已被openvpn使用,然後log也可以讓你檢查一些狀況。接著看client的設定
client(windows XP):
在windows上要用openvpn,就要至官網下載openvpn-gui,找stable,我在用的時候是1.0.3,下載Installation Package後大部份都使用預設值安裝即可,不過,next不要按太快,到了安裝元件的選擇(Choose Components)時,多勾一個My Certificate Wizard(這是我的建議,不勾也無關緊要);安裝中途會有一個驅動的安裝,那是虛擬網卡,然後應該就安裝結束;裝完之後,有裝firewall的人請把openvpn-gui的應用給開放…
再來,在openvpn-gui的安裝路徑中有一個sample-config,把裡面的client.ovpn拷一分到openvpn-gui/config底下,接著,再到server端下載ca.crt/ta.key/你要開放的用戶要用的xxx.crt、xxx.key、xxx.csr,也放在config底下…當然,你要在windows上重做一份這一些檔案也行啦,方法跟server的產生方式一樣,但記住,vars中的KEY_xxxxxx的設定要跟server的一模一樣
接著,編輯client.ovpn
  • client(就是指client的意思,預設是開啟)
  • dev tap/tun(server用什麼,client就要用什麼,所以我是用tun)
  • proto tcp/udp(server用啥,client就要用啥)
  • remote server-real-ip(就server在網路上的ip-address)
  • resolv-retry infinite(重新測試…預設開啟)
  • nobind(預設是nobind)
  • ca/cert/key(跟server一樣意思,就是指定這三個東西的位置,但注意,cert/key是要用client,不是server.cert/server.key唷)
  • tls-auth ta.key-address 0/1(跟server那解釋的一樣,但第二引數在client要改1)
  • comp-lzo/verb 3
client要設定的不多,因為大至上都是預設值,所以也不用怎麼更動
3. 做封包的forward跟nat
這是我一開始卡很久的地方,因為,網路上很多教學都沒說了這一塊,但實際不說也沒錯,因為vpn的用意並不是讓你因為這樣的而繞行方便,但這其實就是一種route and nat的方式,很像一種load-balance(如果你vpn很多的話)
  1. 啟用forward功能[echo "1" > /proc/sys/net/ipv4/ip_forward]
  2. 讓vpn的虛擬網卡在server開放input/output
    input[iptables -A INPUT -i tun+ -j ACCEPT]
    output[iptables -A OUTPUT -i tun+ -j ACCEPT]
  3. 開放server端的vpn與實體網路進出FORWARD
    vpn->eth[iptables -A FORWARD -i eth* -o tun+ -j ACCEPT]
    eth->vpn[iptables -A FORWARD -i tun+ -o eth* -j ACCEPT]
    注意,eth*的星號,指的是你實體網卡的編號,建議指定一張就好…因為我不肯可否用eth+
  4. 啟動nat,由source 10.8.0.0/24傳來的會走eth*出去
    [iptables -t ant -A POSTROUTING -s 10.8.0.0/24 -o eth* -j MASQUERADE]
    eth*這裡的星號是指你10.8.0.0/24要nat從哪一張網卡走出去,然後nat後的ip是那張網卡的
上述指令在server(unix-like os 適用)輸入就ok了
4. routing-table
主要設定就是在server.conf的push "route a.b.c.d x.x.x.x"這裡,就是,當你client要連a.b.c.d/x.x.x.x這網域時,才會往vpn-gateway走,若不是這一個網域的,就會走client其他的網路設定。如果你覺得,我連上vpn就是都只走vpn的話…那你就不用設定route,你直接在server.conf上,寫入[push "redirect-gateway"]就行了,這樣client的default-gateway會改成走vpn-gateway,幾乎就是叫client只走vpn了
以上四個是我實做二天openvpn的重點,實際上,照著參考網頁走就可以讓server啟動正常…但唯一就是routing-table的設定跟package-forward與nat的部份還是得詳研…

為了學校的Windows 7的kms讓校外的教職員工可以方便連線,我不得不考量要用vpn…也實在難為自己。不過這樣又是多學了一些東西…

但以學校學生容易偷吃步(誰叫學校跟微軟簽約沒算學生),怕有學校會濫用學校的key,所以vpn的認證方式不能使用static-auth-ssl,但改目前學校有的認證方式----LDAP---
還好目前有openvpn-auth-by-ldap的plugin可以用,但實際的用法也要再上google翻一下…呼,有的忙了

6 則留言:

j796160836 提到...

謝謝你的資訊,寫的太讚了
可以借轉文章嗎?

死狐狸 提到...

不反對
但我不太保證我用的方式適用任何人

匿名 提到...

我是阿源!有問題想請教大大!!
我目前是學生..由於住校使用學術網路..因學術網路會封鎖特定的網站..
導致無法連結開啟如大陸、香港以及遊戲等特殊網頁(導致查資料很麻煩甚至連育樂消遣都沒有了)..
而且網路上介紹的PPTP、ISP、VPN、proxy等等遠端連線、爬牆的方式都封鎖..
爬文知道使用SSL VPN的方式可以突破這些封鎖..
目前也只能使用這方法來達到我的需求(我同學有用過..他是架設在家裡..
不過他是用防火牆fortigate 60來建構的..由於他目前不在國外所以無法請他幫忙..
而且買一台中古要價就要4650$$)
我是想從學校連回我家裡的桌電在藉由我家的有線電視cable去上網..
不知道所需要的軟體及操作設定方式完整的步驟(sever端及用戶端之設定)..
所以想請大大協助告訴我或是一步一步教我處理!!
目前版上及網路上幾乎都是介紹VPN的架構..另外都是在linux作業系統下的操作..
除此之外多要搭配硬體設備來完成SSL VPN架構(我不是大企業也花不了那麼多錢去買裝置)..
而且需要繁雜的設定..所以我想知道是否有在windows作業系統下且不需要設備..
只用一台桌電及軟體就可以完成架設SSL VPN之設定!
我有查過可以用openVPN來完成..
只是整個操作設定在網路上我都找不到..
不知道個大大對這各方面有沒有研究..
煩請大大不吝告知...感恩感恩^^

死狐狸 提到...

基本上,要一步一步教…很費時間…

原則上,還是自行努力…

你可以多找找openvpn-server架設的資料,因為server是要架在你家的,個人建議是以linux-os下手會比較方便

至於client的方式,各大教學openvpn都有很詳細的講述…我個人建議可以參考j796160836大大的網站…

再來就是,學術網路本身是不會針對區域而做鎖定,因為那是教育部或區網中心才有的權力,你所連線的區域不通行,應該是你們學校網管依據規定所限制的,有空可以去問問學校裡的電算中心。

再來,假設你們學校的網路設備與網管能力不差的話,就算是使用ssl-vpn,還是有極大的可能性被封鎖…並非ssl-vpn是萬能的

匿名 提到...

沒有人講到 windows server 要如何 iptable, 根本沒這個指令阿!

請問 windows server 架設 openvpn server, 如何訪問內網呢?

死狐狸 提到...

回「匿名者」
iptable在linux的角色很多,在本文中提到的iptable用無非只是告知系統,openvpn建立的虛擬網卡要外走時可以使用實體的eth

在windows也是一樣…把虛擬網卡和實體網卡選起來後做「允許共用」,在下在「http://cheaster.blogspot.tw/2011/07/openvpn-server-on-windows-2003.html」有說明

稍微google一下也是有的