起心動念
約一個月之前在架設網站時, 老同事 江龍 提到美西有免費的雲端主機可以用。當時抱著好奇心也去申請了, 參考 “甲骨文Oracle永久免費主機安裝WordPress-介紹與註冊帳號“。
申請之後只是粗略地試用了一下便擱置了, 想說遷移網站(WordPress+mySQL Database+修改網址名稱)也是很費功夫,再說 “樹梅派” 也吃不了多少度電,同時手邊也有一些令人 “好奇和懷念” 的事想要做 (CircuitLab,不需安裝, 只要有網路帳號就能做簡點的電路模擬了), 就先讓 “樹梅派” 撐一撐吧。時間很快, 一個月過去了, Oracle 來信通知試用期結束了!? 那100美元的信用我一毛都還沒用到耶!雖然是人家送的, 但還是覺的可惜。儘管試用到期, Oracle 還是信守承諾 (Always Free) , 目前我刻了兩台虛擬主機各有 50GB 的硬碟空間, 網速 2Gb, 還在免費額度之內。想一想, 拿來做什麼好呢?之前 DVD 有 “區碼”, 現在的 Netflix 好像也有分區, 有一些 ”美劇” 在台灣似乎看不到, 那就用 VPN 把虛擬主機拿來當作跳板吧!
參考
- 【Netflix VPN 推薦】跨區看美台日劇必備款4款VPN!
- 「VPN測試」VPN看美國與日本的NETFLIX-2022年7月5日更新
- 7 款最佳 Netflix VPN 推薦,Netflix 跨區必備!
申請
參考
- 甲骨文Oracle永久免費主機安裝WordPress-介紹與註冊帳號
- 使用免費的 Oracle Cloud 架設 Ubuntu Web Server
- A Powerful Server From Oracle Cloud — Always Free
關於細節, 以上三篇貼文介紹很詳細, 最大坎是自己敢不敢寫下信用卡的卡號, 雖然只是像徵性的預刷一塊美金, 而且會退還, 但還是令人心裡糾結好久!
剛開始時, 關於CPU, 我選 AMD, 最後我都改選ARM. 總的運算效能不會差太多, 但後者搭配的記憶體和網速實在太 “夢幻” 了! 加總的記憶體有 24GB, 網速 2Gb, 硬碟 100GB! 前前後後建了四台虛擬主機, 由於手殘和思慮不周終結了兩台, 所以還在Always Free 額度之內。
我的雲端主機概況

Oracle 在輔助建置時都用日期當作流水號, 好處是讓用戶知道這一些物件是何時建立的, 個人除了主機名稱是自己命名之外, 其他的就交給 Oracle去處理
帳單檢視
雖然終結了兩台虛擬主機, 但還是怕超額, 趕快看一下帳單

費用分析


虛擬主機建制之後, 最好再新增一組帳號, 以防操作失誤時可用來救援, 例如
| sudo adduser rich |
啟動帳密登入功能
| sudo vim /etc/ssh/sshd_config |
加註井字號, 取消 “不要” 就是要的意思
#PasswordAuthentication no
主機底定之後, 更新升級系統軟件
| sudo apt update
sudo apt upgrade |
安裝 OpenVPN 套件
參考
- Ubuntu OpenVPN
- 在windows下利用EasyRSA3產生憑證
- How To Set Up and Configure a Certificate Authority (CA) On Debian 10
- 非對稱式加密演算法 – 橢圓曲線密碼學 Elliptic Curve Cryptography , ECC (觀念篇)
- Easy-RSA
除了參考以上的貼文之外, 我個人的做法如下
先在 Windows 11的 WSL2 (Windows Linux Subsystem), 安裝 easy-rsa
sudo apt install easy-rsa
然後產生 OpenVPN 伺服端和用戶端所需要的相關憑證和密鑰 (這些事在虛擬主機做, 太慢, 會做很久! 如果做錯了還需要重做, 在虛擬主機做很費時! ), 加密演算法, 我選 ECC (橢圓曲線加密), 不選 RSA, 產出相關的憑證和密鑰之後, 再用 xftp 分別傳送到 “伺服端” 和 “用戶端”
例如 :
伺服端
ubuntu@wula-vm:~/easy-rsa$ ls /etc/openvpn
ca.crt client dh2048.pem myserver.conf server server.crt server.key ta.key
伺服端的設定
複製OpenVPN提供的範例
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/myserver.conf
ubuntu@wula-vm:~/easy-rsa$ grep -v “#” /etc/openvpn/myserver.conf | grep -v “;”
底下是修改過的, 有顏色的地方範例裡是注釋掉的, 我因應我的需求取消注釋
port 1194 proto udp dev tun ca ca.crt cert server.crt dh dh2048.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist /var/log/openvpn/ipp.txt push "redirect-gateway def1 bypass-dhcp" keepalive 10 120 cipher AES-256-CBC persist-key persist-tun status /var/log/openvpn/openvpn-status.log log /var/log/openvpn/openvpn.log log-append /var/log/openvpn/openvpn.log verb 3 explicit-exit-notify 1
基本上照OpenVPN的組態範例就可以了,
為了查找問題, 打開黃色的部分
為了當作網際網路路由, 打開橙色的部分
修改之後, 需重新啟動OpenVPN, 修改才會生效
sudo systemctl restart openvpn@myserver (myserver 對應 myserver.conf)
讓虛擬主機做為跳板, 還需要額外設定
sudo vim /etc/sysctl.conf , 取消下列的井字號, 以便啟動 ip forwarding (啟動路由)
#net.ipv4.ip_forward=1
執行下列命令, 讓設定生效
sudo sysctl -p /etc/sysctl.conf
檢視虛擬主機的網路介面
ubuntu@wula-vm:~/easy-rsa$ ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc pfifo_fast state UP group default qlen 1000 link/ether 02:00:17:08:ee:d6 brd ff:ff:ff:ff:ff:ff inet 10.0.0.15/24 metric 100 brd 10.0.0.255 scope global enp0s3 valid_lft forever preferred_lft forever inet6 fe80::17ff:fe08:eed6/64 scope link valid_lft forever preferred_lft forever 5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 500 link/none inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0 valid_lft forever preferred_lft forever inet6 fe80::f134:3916:e2f8:a6d3/64 scope link stable-privacy valid_lft forever preferred_lft forever
“enp0s3” 是虛擬主機的雲端網路介面, 屬私人IP網段, 目前個人架設的虛擬主機類似下圖的第二種。OpenVPN跑起來之後, 會再新增一個介面 “tun0”

防火牆
Oracle 的雲端網路已經架設了防火牆 (Security List), 作業系統ubuntu本身也啟動了防火牆, 選一個就可以了, 建議用雲端網路的防火牆即可, 所以關掉作業系統內的防火牆
#Flush iptables
sudo iptables -F
#List iptables, for double check
sudo iptables -L
因為 OpenVPN 使用 port 1194, UDP 進行連線, 所以要在雲端網路的防火牆開 port 1194, UDP, 如下





最後, 在作業系統內要新增一條 nat 規則
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o enp0s3 -j MASQUERADE
這一條規則告訴作業系統, 從 ens0s3 介面送出去的網路封包要進行 “轉址” 動作, 因為如果沒有 “轉址”, 當封包抵達目的地時, 目的地的回應封包會不知道要往哪裡送
用下列命令檢視確認一下
sudo iptables -t nat -L
如果沒有問題, 用下列命令儲存設定
sudo netfilter-persistent save
用戶端
在個人電腦安裝 應用程式OpenVPN

把 ca.crt, client.crt, client.key 串成一個檔案, 例如 ruma.ovpn, 方便 OpenVPN 應用程式使用

把設定檔移動到個人家目錄的 OpenVPN\config資料夾下, 如下

測試
VPN 連線前:
WiFi是我目前的網際網路

網際網路從我的分享器((TP Link AX50)進出

ip location 顯示我的 ip 地址是在台灣台北

SPEEDTEST, 我的 HiNet 方案是 100Mb下行, 40Mb上行 , 測試數據破表了!

進行VPN連線 :
點擊OpenVPNGUI執行用戶應用程式



連線中…
![OpenVPN (ruma) Fri Jul 8200900 2022 '•Mndows version 10.0 (%ndows 10 or greater) 64bit Fri Jul g 200900 openssL 3 May2022, LZ0210 Fri Jul 8 2022 TCP'UDP: Preserving recent* used remote address: IAF_lNET112g.146.182.214: 1 1 g Fri Jul 82009002022 UDP link (not bound) Fri Jul g UDP link remote 146, 18221471194 Fri Jul 8 200901 2022 Peet connection Initiated with (AF_lNET112g_ 146.182214:1194 Fri Jul 8200901 2022 open_tun Fri Jul g 200901 2022 TAP-%ndows6] opened Fri Jul 8 2022 Notited TAP-Windows driver to set a DHCP IPJnetmask 01108.0_61255.255255252 Fri Jul 8200901 2022 Successfu ARP Flush on *Iterface [54] (OE9FD9B7.BCAB4C57-9E6D086AID6El Fri Jul g 200901 set to 1500 on interface 54 using service Bytes B out 42 B openVPN 11.2900/257](https://rurupapa.tplinkdns.com/wp-content/uploads/2022/07/openvpn-ruma-fri-jul-8200900-2022-mndows-ver.png)
連線成功

VPN 連線後
網際網路的圖示改變了

ipconfig /all, 檢視Windows主機的網路介面

route print, 檢視Windows主機的路由表

ip location 顯示我的 ip 地址是在美國鳳凰城 [Phoenix,Arizona (US)]
![c 9 iplocation.net iplocation .neE HIDE IP REVIEWS CHANGE IP Where is My IP Location? Your IP Address is 129.146.182.214 Hide IP with VPN IP Location Finder IPv4, IPv6 or Domain Name This is the public IP address of your computer, and the accuracy of geolocation mav vary. Do vou have a problem with IP location lookup? Report a problem. & Signup WEB PROXY IP Lookup IP Address Details IPv4 Address IPv6 Address IP Location 129.146.182.214 Not detected Hide my IP with VPN Phoenix, Arizona (US) (Details]](https://rurupapa.tplinkdns.com/wp-content/uploads/2022/07/c-9-iplocation-net-iplocation-nee-hide-ip-r.png)
SPEEDTEST, at 20:31 on 2022/07/08, 此時應該是網路尖峰? 還是離峰? (大家在用餐?)

在這個時段能有這樣的速度, 很可以!
犯錯得到的教訓
虛擬主機的登入方式預設採用密鑰方式, Oracle 提供的 Ubuntu鏡像(作業系統)預設用戶名稱 ubuntu, 預設登入方式不用密碼 (使用密鑰), 不允許空密碼。因為要用 虛擬機加VPN 充當分享器來執行跳板的角色, 所以有些路由和 iptables 要設定, 初始階段設定不到位或設定錯誤在所難免。也因為這樣, 不小心把虛擬主機的七竅封了六竅, 只剩 Serial Console可以救命。Oracle官方文件提到 Serial Console 可以不用登入直接進系統(Shell),但僅限 Oracle Linux,Ubuntu Linux 沒有這個功能支援。唉!最後,砍掉重練。在學到教訓之後,馬上在新增的主機建製新帳戶,新增密碼,起動帳密登入方式,增大容錯空間!
從 Cloud Shell 用備用帳號登入 (帳號密碼都要)

ttyAMA0, 代表這個Console 是serial port
