0%

引言

自從wireguard橫空出世之後,VPN市場就像攪了一池春水一樣出現了巨大的漣漪。當然我們老牌的OpenVPN也沒閒著,在2020年也默默的更新版本到2.5。要知道2.4已經是2016年的事情,更不用說網路上很多教學都還停留在2.2、2.3,那都可算是10年以上的上古捲軸了…

這次2.5版本的新功能很多與windows的改良有關,在經過與wireguard windows版的一番搏鬥後彷彿看見了一道曙光!
然而可能是剛出的關係,目前相關資料並不多,包括在OpenVPN本身的官網也是。尤其在windows的世界更是屈指可數,所以打算把花了一段時間鑽研的技巧在這邊詳細紀錄,希望照亮後人的道路(或是引領到另一個崩潰邊緣?)

閱讀全文 »

Q: 任意位置在陣列插入值可以用splice,那陣列內的值交換位置怎麼做呢?

1
2
3
4
5
6
7
8
9
10
// target a[3]
a = [0,1,2,3,4,5]

// 向前交換
[a[3], a[3 - 1]] = [a[3 - 1], a[3]]
// result: [0,1,3,2,4,5]

// 1跟4交換
[a[1], a[4]] = [a[4], a[1]]
// result: [0,4,2,3,1,5]

同理其實可以整個陣列內的位置完全打亂
以上

緣由

OpenVPN在正常情況下會將所有網路傳輸優先以VPN通道來做傳輸,但這樣會造成外網的上網速度緩慢(等於多繞一個彎從VPN那邊連到外網)。在某些使用場景中顯得不必要,像是連回公司辦公。因此是否可以設定只有訪問某些IP才走VPN通道呢?

設定

幸好這部份在client端中就可以做設定,用文字編輯器打開我們連線時用的.ovpn檔
在檔案尾端加入

1
2
3
4
5
# 設定openvpn連線後也不會走vpn通道
route-nopull

# 設定若要訪問某個網路區段擇優先走vpn通道,下面的例子是192.168.1.1~192.168.1.255
route 192.168.1.0 255.255.255.0 vpn_gateway

另外OpenVPN還支持完全相反的設定,意即所有網路訪問都走vpn通道,但是訪問某個網段則否

1
route 192.168.1.0 255.255.255.0 net_gateway

差別就是後面是 vpn_gateway 還是 net_gateway

以上

在OpenVPN 2.5.0之後,只要把想開機自動連線的.ovpn設定檔放到OpenVPN目錄內的config-auto
預設應該會在 c:\Program Files\OpenVPN\config-auto

另外要記得設定OpenVPN為服務(安裝的時候預設不裝,這邊要記得),並設定為自動啟動

服務位置

RWD網站在手機瀏覽器有時會能夠非預期左右滑動,往右滑滑出一大塊空白

解決辦法有兩個,
一個是用瀏覽器的檢查工具慢慢找出是哪個元素跑出去
另外一個是眼不見為淨的方式,在求快解決問題的時候非常好用:

1
2
3
4
body {
max-width: 100%;
overflow-x: hidden;
}

這個選擇器的設定值下在body標籤上可確保網頁內容的寬度限制在滿版100%以內,overflow-x設定為auto則是將網頁左右超出的部分隱藏,即可避免出現四向滑動的問題。但有時間還是要找出是哪個元素出了問題,否則日後這個問題會回頭找你的麻煩。

在完成了憑證製作後,接著就是要來做OpenVPN的設定檔,這裡Server端與Client端分別都要做(其中Client端還要搭配他的憑證個別製作)

Server端

進入OpenVPN的安裝處,預設是裝在C:\Program Files\OpenVPN
找到一個sample-config目錄點進去
將 server.ovpn 複製到上一層的 config 目錄內 -> C:\Program Files\OpenVPN\config
用記事本或文字編輯軟體打開 server.ovpn
P.S. 該檔案中 # 及 ; 都是代表註解的意思,也可以看到裡面會在設定開頭使用 ; 來使設定無效化

ovpn結構常用部份介紹

以下的server設定需要跟client一致,故這邊需要一開始就想好,以免日後造成麻煩

1
2
3
4
5
6
7
8
9
# 代表OpenVPN對外連線使用的port,最好更換以免被駭客掃描,或是改為80有機會突破公司的防火牆
port 1194


# 設定OpenVPN的虛擬網卡名稱,在windows狀況下會需要設定,在tap模式下很重要
dev-node MyTap

;dev tap
dev tun

OpenVPN連線方式分成tap及tun,想選哪個就去掉分號,另一個開頭加分號即可。兩種連線的特性不大相同,這邊簡單說:

tap

  • 可以使用server所在的區網,並連到該區網其他電腦

tun

  • android 的 OpenVPN 官方app只能用這種方式連線
  • 只可以互相連線到其他同是連結 OpenVPN 的裝置
  • 據說速度較快

server獨有設定

此部份不必和client一致

1
2
3
4
5
6
7
8
9
10
11
12
13
# 設定憑證,記得檔名要一致,並把這3個檔案放到跟server.ovpn再一起
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem

# 設定server自身在vpn中的ip及網路遮罩
server 10.8.0.0 255.255.255.0
# 其中ip盡量以10.8或192.168開頭,且四組數字前三組 `10.8.0.x` 不要與現有區網的前三組相同
# 網路遮罩 255.255.255.0 照預設就好

# 設定ipp.txt的文件,該文件紀錄每個client連線後被分配的vpn ip
ifconfig-pool-persist ipp.txt

大綱

  • 起步 - Server端安裝
  • 在Server端製作key及crt
  • server的vopen檔案製作
  • client的vopen檔案製作
  • 連線測試

起步

使用版本:
windows 10 20H2
OpenVPN 2.5.0 released 28

OpenVPN

在 openVpn的主網頁取得安裝程式,這邊我們選 windows 64bit msi installer
https://openvpn.net/community-downloads/
安裝記得選Custom,我們需要做一些額外安裝(Client端就不用了,直接install)
確保OpenSSL Utilities的EasyRSA 3 Certificate Management Scripts有安裝
OpenVPN Service也可以考慮裝,這樣讓伺服器開機就自動啟動VPN環境了

OpenSSL

另外在Server端我們需要在安裝 Openssl 來產生連線用的憑證,到時候每個使用者都要做一張

這邊我們可以先開啟終端機視窗 (命令提示字元),輸入 openssl version 確認是否有安裝

而在windows系統下的openssl有兩種取得途徑:

  • [首選] OpenVPN內建,最新的版本安裝後會內附,就在 OpenVPN\bin 內,將這個路徑放入Path
  • 安裝Git for windows,裡面就會附該程式 openssl.exe ,記得要將該程式所在位置加入環境變數PATH,以我的狀況來說預設安裝在 C:\Program Files\Git\mingw64\bin
  • 使用網路上熱心幫忙編譯好的 https://slproweb.com/products/Win32OpenSSL.html ,選擇Win64 OpenSSL Light即可,記得也要手動將路徑加到環境Path,這邊通常能安裝到最新的版本。我這邊預設是裝在 C:\Program Files\OpenSSL-Win64\bin

製作連線憑證

開啟終端機視窗 (命令提示字元),記得要用管理者權限開啟。
進入剛剛安裝OpenVPN目錄裡面的easy-rsa,我這邊是 C:\Program Files\OpenVPN\easy-rsa

第一步:

輸入執行 init-config
它會自動產生vars.bat,這部份做一次就好
打開vars.bat,拉到最下面可以修改一些參數,以便日後不用重複輸入

1
2
3
4
5
6
set KEY_COUNTRY=US              # 國家代碼,限2碼
set KEY_PROVINCE=CA # 省市代碼
set KEY_CITY=SanFrancisco # 所在程式
set KEY_ORG=OpenVPN # 所屬組織
set KEY_EMAIL=mail@host.domain # 聯絡信箱
set KEY_OU=changeme # 組織內單位

第二步 (此步驟為往後需要再建立憑證時的起點)

輸入執行 vars
輸入執行 clean-all
到這裡環境初始化完成,出現 keys 目錄

第三步,產生ca憑證

輸入執行 build-ca
這邊就會把剛才vars設定的那些再問一次,如果不需要修正直接enter跳過,需要注意的是這邊:
Common Name (eg, your name or your server's hostname)
這邊是問憑證要給誰用,我們要產生的是伺服器的憑證,打 server 。你可以取想要的名字,但要注意的是不能跟之後的client憑證重複
到這裡可以看一下 easy-rsa 目錄內多了 keys 的目錄,且裡面有了 ca.crtca.key 這兩個檔案缺一不可,沒有就是失敗了

第四步,產生伺服器憑證

輸入執行 build-key-server server 這邊的server 是要輸入你剛剛打的Common Name,切記要一致。
同樣會問剛才vars內的問題,盡量都保持一致,最重要的 Common Name 要跟剛剛一致
接著 keys 目錄會產生 server.crtserver.key ,或是你剛剛打的Common Name

第五步,產生 ta.key

輸入執行 OpenVPN --genkey --sec

第六步,產生 dh2048.dem

輸入執行 build-dh

第七步,產生Client的憑證

日後只產生client憑證記得要先跑第二步再跳到這邊
輸入執行 build-key client , 這邊的 client 可以自行取名,同樣待會會問Common Name,都要打一樣,此外不能跟其他client或server的Common Name同名
執行完成會產生 client.crtclient.key ,沒有這兩個檔案代表失敗

最後…

確認一下你的 keys 目錄內應該會有下列檔案

1
2
3
4
5
6
7
8
9
10
11
ca.crt
ca.key
ta.key
dh2048.dem
server.crt
server.key
client.crt
client.key
client2.crt
client2.key
...

今天就聊到這邊,下一篇繼續談如何設定伺服器的.ovpn檔案

這是網站的第一篇文章

我期許他能成為催促我不斷前進的地方

希望能夠像園丁一樣每天細心照顧

現在就來好好的插秧吧