[轉貼]OpenVPN完整SSL設定

因為作者寫得太優了,字字是重點
所以只好全轉貼了,有些部分我還看不太懂
放在這裡留著慢慢看

真的很謝謝原作者,因為這份資料他把VPN遺漏的NAT和iptables設定都加入進去了
VPN我之前有設定成功連線過,但除了ping,其他都無法使用
但又把client強制把gateway設定到server端上,因沒有配套措施
導致client整個斷線….:(

看到這篇我又有動力想嘗試了,看來只能在linux下才能發揮OpenVPN的全功能
(windows版就殘念….我再找文章看看)

 

2010/2/12補充:文章終於看董一些了,也可以正常用VPN來上網
看還是搞不定VPN存取server網路內的電腦= =

以下試做發現的勘誤,直接改上去

———————————————————————————————–

原文出處http://cheaster.blogspot.com/2009/11/openvpn-by-ssl.html

參考網頁:
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憑證]

Johnny註:關於這部分我會重新整理這段的做法,最常見犯的錯誤是在變數宣告上,指令為

. ./vars

其他依序

./clean-all
./build-ca
./build-inter 主機名字

注意主機名字不可重複,其他照提示作就可以了
可參考

http://fedoraproject.org/wiki/Openvpn

我之後會重新整理這段文章

[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 -o tun+ -j ACCEPT]
  3. 開放server端的vpn與實體網路進出FORWARD
    eth->vpn[iptables -A FORWARD -i eth* -o tun+ -j ACCEPT]
    vpn->eth[iptables -A FORWARD -i tun+ -o eth* -j ACCEPT]

    注意,eth*的星號,指的是你實體網卡的編號,建議指定一張就好…因為我不肯可否用eth+

Johnny註:文中的eth*指的是對外的網卡介面,例如:ppp0或eth0
目前如果要用VPN上網的話,還是只能架在Linux上
除非windows上有封包轉遞的軟體可以處理

參考http://openvpn.net/index.php/open-source/documentation/howto.html#redirect
http://fedoraproject.org/wiki/Openvpn

  1. 啟動nat,由source 10.8.0.0/24傳來的會走eth*出去
    [iptables -t nat -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的部份還是得詳研… 

Johnny註:正常的log長這樣

http://openvpn.net/index.php/open-source/documentation/howto.html#start

[備忘]XP常用的網路指令

節錄自
http://blog.xuite.net/air.weid/computer/21525555?ref=rel
http://blog.xuite.net/become/blog/13563859
http://w-type.blogspot.com/2007/09/windows-xp-route.html
有些指令還是記不得,放在這裡備用

 

常用的網路指令

ping
ping用於確定本地主機是否能與另一台主機交換(發送與接收)資料。根據返回的訊息,你就可以推斷TCP/IP參數是否設置正確以及運作是否正常。 Windows上的Ping指令預設發送4個ICMP封包(32byte),如果一切正常,應能得到4個回應封包。Ping還能顯示TTL(Time To Live存在時間)值,你可以通過TTL值推算一下封包已經通過了多少個路由器。
netstat
netstat用於顯示與IP、TCP、UDP和ICMP等協定的統計資料,一般用於檢驗本機各埠的網絡連接情況。
ipconfig
ipconfig用於查詢目前電腦的網路組態,包括IP位址、MAC硬體位址、Gateway、子網路遮罩、DHCP主機、DNS主機& hellip;等等資訊。
arp
arp用於確定對應IP的網卡實際位址。
tracert
tracert命令可以用來追蹤封包使用的路由(路徑)。
pathping
pathping的功能與tracert很類似,一樣可以偵測本機電腦到對方電腦的所經路徑,並列出經過的全部節點。不過 pathping有一個更實用的功能,它可以顯示各節點的資料封包遺失狀況,讓我們可以直接判斷是哪台路由器或電腦造成連線速度驟減或其他網路障礙。
route
route命令可以用來顯示和修改路由表的內容。
nbtstat
nbtstat命令用來提供關於NetBIOS的統計資料。運用NetBIOS,你可以查看本機或遠方主機的NetBIOS名字表格。
net
net命令有很多函數可用於電腦之間的NetBIOS連接,如net view、net config和net use等。

 

路由表相關

Route Print:印出你現在的Route Table

●route add 用來加入路由路徑
例如:route add 192.168.0.0 mask 255.255.0.0 192.168.1.1 if 0x2 metric 20
指出 Network DestinationNetmaskGatewayInterface metric

● route -p add 用來永久加入路由路徑,使用-p 參數可以保留路徑設定,不會因為電腦重開機而消失。
例如:route -p add 192.168.0.0 mask 255.255.0.0 192.168.1.1 if 0x2 metric 20

● route delete用來刪除路由路徑。
例如:route delete 192.168.0.0 mask 255.255.0.0

● route change用來修改現有的路徑設定。
例如:route change 192.168.0.0 mask 255.255.0.0 192.168.1.1 if 0x2 metric 10

[教學]ASPX複製、更名會出現的錯誤和問題除錯

當你在寫ASP.net (ASPX)的網頁程式的時候,如果你的Visual Studio 2008 有出現以下的訊息:

錯誤訊息1BC30451名稱<xxx控制項>未宣告

WebApplication1WebForm1.aspx.vb(7) :error BC30506: Handles clause requires a WithEvents variable defined in the containing type or one of its base types.

WebApplication1WebForm1.aspx.vb(9) :error error BC30451: Name ‘ TextBox1’ is not declared.

WebApplication1WebForm1.aspx.vb(9) :error BC30451: 名稱 ‘ TextBox1’ 未宣告。(中文版會出線的訊息) 閱讀全文〈[教學]ASPX複製、更名會出現的錯誤和問題除錯〉

[教學]網芳設定密碼

這份文件搞很久,自己也試很久。參考很多人的經驗,還有網路
終於可以在Windows XP下,網路上的方鄰中為該分享的電腦設定共用資料夾
分開權限管理

網路上的資料很多都不夠完整,這份是蒐集最完整的一版
—————————————————————————————————————–

  閱讀全文〈[教學]網芳設定密碼〉

適用Linux的Google瀏覽器已推出測試版

Wed 2009/12/9 2:41
各位 Linux 使用者,您好:

「Google 瀏覽器」現已推出可在 Linux 上使用的測試版!感謝許多 Chromium 和 WebKit 開發人員的努力,讓「Google 瀏覽器」成為快速又穩定的瀏覽器。以下是有關「Google 瀏覽器」小組的一些有趣資訊:

撰寫了約 60,000 行Linux的程式碼

產生了 23 個開發版本

修正了 2,713 個Linux的錯誤 閱讀全文〈適用Linux的Google瀏覽器已推出測試版〉

[轉貼]別讓PowerPoint害死你

別讓PowerPoint害死你/Jesper Johansson
PowerPoint很有用,但為何大多數用它所作的簡報說明都極端令人痛苦?


我又參加了另1個活動,這1次我決定在自己的報告之間,抽空看看其他幾個會議,而不是光忙著找免費的食物。這次經驗讓我想起1個舊時的概念:PowerPoint害死人。某些人使用PowerPoint的方式實在令人不敢恭維。Steve Riley常稱電子郵件為「知識滅絕之地」,Steve老兄,你錯了,毀滅知識最快的途徑,就是把它放進PowerPoint。 閱讀全文〈[轉貼]別讓PowerPoint害死你〉

PowerPoint 的多重螢幕分割功能

在使用 PowerPoint 做簡報的時候,有個很方便的小功能,可以讓自己的螢幕顯示備忘錄的內容,而另外輸出的大螢幕則顯示原本的簡報內容。

這是個滿實用的功能,不過好像不多人知道該怎麼用,所以在此介紹一下。

雖然 PowerPoint 2000 似乎也有類似的設定,不過在我的電腦上沒辦法正確使用這個功能,故以下是以我實驗成功的 Microsoft PowerPoint 2003 來示範 (Microsoft PowerPoint 2007也是有保留這個功能,只是要到適當的地方做調整)。

  閱讀全文〈PowerPoint 的多重螢幕分割功能〉