
為什麼使用 VPN?

VPN(虛擬私人網路)是一種通過網路加密連接不同網路節點的技術,提供了一種私密、安全的方式來進行網路訪問。當我們需要訪問內部網路資源、加強網路傳輸安全,或在不安全的網路環境中(如公共 Wi-Fi)保護數據時,VPN 就成為了理想的解決方案。
使用 VPN 的主要優勢包括:
- 隱私保護:所有數據在傳輸過程中被加密,有效防止被竊聽。
- 安全性增強:VPN 建立在加密通道之上,有效降低遭受中間人攻擊的風險。
- 遠端訪問:允許員工從不同地點安全地訪問公司內部資源。
- 地區限制突破:允許從受限地區訪問全球的資源,特別適合需要跨地區工作的團隊。
在本文章中,我們將使用 AWS EC2 搭建 OpenVPN 伺服器,並結合 VPC、Subnet、Internet Gateway、路由表和安全組等 AWS 網路資源來實現一個完整、安全的 VPN 服務。這樣的架構適合需要安全遠程訪問企業資源或分布式團隊的需求。
架設步驟
1. AWS 網路層相關設置
-
建立 VPC
VPC 是 AWS 中專用網路的基礎配置。設定 VPC 時,需設置 IPv4 CIDR 為10.0.0.0/16,以確保在子網分配中有足夠的 IP 範圍。 -
設置公共 Subnet
創建子網(Subnet)並命名為Public-Subnet,將範圍設為10.0.1.0/24,以允許實例連接至公共網路。 -
配置 Internet Gateway
在 VPC 控制台中創建 Internet Gateway,並將其附加到先前建立的 VPC,讓子網能訪問外部網路。 -
設置路由表
新增一個路由表,將0.0.0.0/0的流量路由至 Internet Gateway,以允許所有出站流量。 -
設置安全組
在 AWS 安全組中新增入站規則來允許 UDP 1194 端口(用於 OpenVPN)和 ICMP(用於 ping 測試),並允許所有出站流量。
2. OpenVPN 伺服器設置
-
啟動 EC2 實例並安裝 OpenVPN
使用Public-Subnet啟動 EC2 實例,選擇 Amazon Linux 或 Ubuntu 作為作業系統,並更新系統及安裝 OpenVPN 和 Easy-RSA 工具:sudo yum update -y # Amazon Linux sudo apt update && sudo apt upgrade -y # Ubuntu sudo yum install openvpn easy-rsa -y # Amazon Linux sudo apt install openvpn easy-rsa -y # Ubuntu -
設置 PKI 和生成憑證
使用 Easy-RSA 在/etc/openvpn/位置建立 PKI 環境並生成 CA 憑證、伺服器和客戶端憑證:cd /etc/openvpn sudo mkdir -p /etc/openvpn/easy-rsa/keys sudo cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa cd /etc/openvpn/easy-rsa sudo ./easyrsa init-pki sudo ./easyrsa build-ca nopass sudo ./easyrsa gen-req server nopass sudo ./easyrsa sign-req server server sudo ./easyrsa gen-dh sudo ./easyrsa build-client-full client1 nopass sudo cp pki/ca.crt pki/private/server.key pki/issued/server.crt pki/dh.pem /etc/openvpn/ -
編輯 OpenVPN 伺服器配置文件
編輯/etc/openvpn/server/server.conf配置檔案,設置網段、加密方式、端口等。port 1194 proto udp dev tun ca /etc/openvpn/ca.crt cert /etc/openvpn/server.crt key /etc/openvpn/server.key dh /etc/openvpn/dh.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" push "route 10.0.1.0 255.255.255.0" keepalive 10 120 data-ciphers AES-256-GCM:AES-128-GCM:AES-256-CBC:AES-128-CBC user nobody group nobody persist-key persist-tun status openvpn-status.log verb 3 -
注意: 配置
user nobody和group nobody以確保 OpenVPN 以最低權限執行,同時應確認伺服器配置文件的擁有權設定為nobody,這樣可減少伺服器遭受入侵時的風險。 驗證文件擁有權:sudo chown nobody:nobody /etc/openvpn/server/server.conf ls -l /etc/openvpn/server/server.conf
3. Server IP 和 NAT 確認
-
啟用 IP 轉發
透過下列指令,將net.ipv4.ip_forward設為1以確保 EC2 可以作為路由器來轉發 VPN 客戶端的流量。sudo sysctl -w net.ipv4.ip_forward=1 -
設置 NAT 規則
使用iptables設置 NAT 規則,讓來自 VPN 網段10.8.0.0/24的流量能夠轉發至公共網路:sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE -
確認 NAT 設置
安裝iptables後可輸入以下指令來檢查 NAT 規則是否正確設定:sudo iptables -t nat -F POSTROUTING ip route show
4. 線上啟動測試 OpenVPN
-
啟動 OpenVPN 伺服器
開啟 OpenVPN 服務並設置自動啟動。sudo systemctl start openvpn-server@server.service sudo systemctl enable openvpn-server@server.service -
檢查伺服器狀態和日誌
確認伺服器已正常啟動並無錯誤。若使用nobody權限執行,可用以下指令檢查配置:sudo cat /etc/openvpn/server/server.conf sudo systemctl status openvpn-server@server.service sudo journalctl -u openvpn-server@server.service
5. 地端啟動測試 OpenVPN
-
下載所需的憑證和設定文件
使用scp將伺服器的憑證和配置檔案下載到本地端:scp -i /path/to/your-key.pem ec2-user@<EC2_PUBLIC_IP>:/etc/openvpn/ca.crt . scp -i /path/to/your-key.pem ec2-user@<EC2_PUBLIC_IP>:/etc/openvpn/issued/client1.crt . scp -i /path/to/your-key.pem ec2-user@<EC2_PUBLIC_IP>:/etc/openvpn/private/client1.key . -
建立
client.ovpn文件
創建 OpenVPN 配置文件,並填寫伺服器 IP 和憑證信息。client dev tun proto udp remote <EC2_PUBLIC_IP> 1194 nobind ca ca.crt cert client1.crt key client1.key -
測試連線
啟動 OpenVPN 客戶端並測試連接。sudo openvpn --config client.ovpn -
確認連線狀況
成功連接後,執行ping google.com來測試連線是否正常。
附加注意事項
- 確保防火牆和安全組規則正確配置,以允許必要的流量。
- 檢查 NAT 規則是否正確,以便來自 VPN 網段的流量能夠通過 EC2 實例訪問互聯網。
- 如果使用
iptables,可以考慮是否需要安裝ufw作為簡化管理的工具,但通常選擇其中一個即可。