01-使用 aws 建設 vpn
為什麼使用 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 工具:1
2
3
4
5sudo 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 憑證、伺服器和客戶端憑證:1
2
3
4
5
6
7
8
9
10
11cd /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
配置檔案,設置網段、加密方式、端口等。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21port 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
,這樣可減少伺服器遭受入侵時的風險。
驗證文件擁有權:1
2sudo 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 客戶端的流量。1
sudo sysctl -w net.ipv4.ip_forward=1
設置 NAT 規則
使用iptables
設置 NAT 規則,讓來自 VPN 網段10.8.0.0/24
的流量能夠轉發至公共網路:1
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
確認 NAT 設置
安裝iptables
後可輸入以下指令來檢查 NAT 規則是否正確設定:1
2sudo iptables -t nat -F POSTROUTING
ip route show
4. 線上啟動測試 OpenVPN
啟動 OpenVPN 伺服器
開啟 OpenVPN 服務並設置自動啟動。1
2sudo systemctl start openvpn-server@server.service
sudo systemctl enable openvpn-server@server.service檢查伺服器狀態和日誌
確認伺服器已正常啟動並無錯誤。若使用nobody
權限執行,可用以下指令檢查配置:1
2
3sudo cat /etc/openvpn/server/server.conf
sudo systemctl status openvpn-server@server.service
sudo journalctl -u openvpn-server@server.service
5. 地端啟動測試 OpenVPN
下載所需的憑證和設定文件
使用scp
將伺服器的憑證和配置檔案下載到本地端:1
2
3scp -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 和憑證信息。1
2
3
4
5
6
7
8client
dev tun
proto udp
remote <EC2_PUBLIC_IP> 1194
nobind
ca ca.crt
cert client1.crt
key client1.key測試連線
啟動 OpenVPN 客戶端並測試連接。1
sudo openvpn --config client.ovpn
確認連線狀況
成功連接後,執行ping google.com
來測試連線是否正常。
附加注意事項
- 確保防火牆和安全組規則正確配置,以允許必要的流量。
- 檢查 NAT 規則是否正確,以便來自 VPN 網段的流量能夠通過 EC2 實例訪問互聯網。
- 如果使用
iptables
,可以考慮是否需要安裝ufw
作為簡化管理的工具,但通常選擇其中一個即可。