01-使用 aws 建設 vpn

為什麼使用 VPN?

使用VPN

VPN(虛擬私人網路)是一種通過網路加密連接不同網路節點的技術,提供了一種私密、安全的方式來進行網路訪問。當我們需要訪問內部網路資源、加強網路傳輸安全,或在不安全的網路環境中(如公共 Wi-Fi)保護數據時,VPN 就成為了理想的解決方案。

使用 VPN 的主要優勢包括:

  • 隱私保護:所有數據在傳輸過程中被加密,有效防止被竊聽。
  • 安全性增強:VPN 建立在加密通道之上,有效降低遭受中間人攻擊的風險。
  • 遠端訪問:允許員工從不同地點安全地訪問公司內部資源。
  • 地區限制突破:允許從受限地區訪問全球的資源,特別適合需要跨地區工作的團隊。

在本文章中,我們將使用 AWS EC2 搭建 OpenVPN 伺服器,並結合 VPC、Subnet、Internet Gateway、路由表和安全組等 AWS 網路資源來實現一個完整、安全的 VPN 服務。這樣的架構適合需要安全遠程訪問企業資源或分布式團隊的需求。


架設步驟

1. AWS 網路層相關設置

  1. 建立 VPC
    VPC 是 AWS 中專用網路的基礎配置。設定 VPC 時,需設置 IPv4 CIDR 為 10.0.0.0/16,以確保在子網分配中有足夠的 IP 範圍。

  2. 設置公共 Subnet
    創建子網(Subnet)並命名為 Public-Subnet,將範圍設為 10.0.1.0/24,以允許實例連接至公共網路。

  3. 配置 Internet Gateway
    在 VPC 控制台中創建 Internet Gateway,並將其附加到先前建立的 VPC,讓子網能訪問外部網路。

  4. 設置路由表
    新增一個路由表,將 0.0.0.0/0 的流量路由至 Internet Gateway,以允許所有出站流量。

  5. 設置安全組
    在 AWS 安全組中新增入站規則來允許 UDP 1194 端口(用於 OpenVPN)和 ICMP(用於 ping 測試),並允許所有出站流量。


2. OpenVPN 伺服器設置

  1. 啟動 EC2 實例並安裝 OpenVPN
    使用 Public-Subnet 啟動 EC2 實例,選擇 Amazon Linux 或 Ubuntu 作為作業系統,並更新系統及安裝 OpenVPN 和 Easy-RSA 工具:

    1
    2
    3
    4
    5
    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
  2. 設置 PKI 和生成憑證
    使用 Easy-RSA 在 /etc/openvpn/ 位置建立 PKI 環境並生成 CA 憑證、伺服器和客戶端憑證:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    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/
  3. 編輯 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
    21
    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
  4. 注意: 配置 user nobodygroup nobody 以確保 OpenVPN 以最低權限執行,同時應確認伺服器配置文件的擁有權設定為 nobody,這樣可減少伺服器遭受入侵時的風險。
    驗證文件擁有權:

    1
    2
    sudo chown nobody:nobody /etc/openvpn/server/server.conf
    ls -l /etc/openvpn/server/server.conf

3. Server IP 和 NAT 確認

  1. 啟用 IP 轉發
    透過下列指令,將 net.ipv4.ip_forward 設為 1 以確保 EC2 可以作為路由器來轉發 VPN 客戶端的流量。

    1
    sudo sysctl -w net.ipv4.ip_forward=1
  2. 設置 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
  3. 確認 NAT 設置
    安裝 iptables 後可輸入以下指令來檢查 NAT 規則是否正確設定:

    1
    2
    sudo iptables -t nat -F POSTROUTING
    ip route show

4. 線上啟動測試 OpenVPN

  1. 啟動 OpenVPN 伺服器
    開啟 OpenVPN 服務並設置自動啟動。

    1
    2
    sudo systemctl start openvpn-server@server.service
    sudo systemctl enable openvpn-server@server.service
  2. 檢查伺服器狀態和日誌
    確認伺服器已正常啟動並無錯誤。若使用 nobody 權限執行,可用以下指令檢查配置:

    1
    2
    3
    sudo cat /etc/openvpn/server/server.conf
    sudo systemctl status openvpn-server@server.service
    sudo journalctl -u openvpn-server@server.service

5. 地端啟動測試 OpenVPN

  1. 下載所需的憑證和設定文件
    使用 scp 將伺服器的憑證和配置檔案下載到本地端:

    1
    2
    3
    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 .
  2. 建立 client.ovpn 文件
    創建 OpenVPN 配置文件,並填寫伺服器 IP 和憑證信息。

    1
    2
    3
    4
    5
    6
    7
    8
    client
    dev tun
    proto udp
    remote <EC2_PUBLIC_IP> 1194
    nobind
    ca ca.crt
    cert client1.crt
    key client1.key
  3. 測試連線
    啟動 OpenVPN 客戶端並測試連接。

    1
    sudo openvpn --config client.ovpn
  4. 確認連線狀況
    成功連接後,執行 ping google.com 來測試連線是否正常。


附加注意事項

  • 確保防火牆和安全組規則正確配置,以允許必要的流量。
  • 檢查 NAT 規則是否正確,以便來自 VPN 網段的流量能夠通過 EC2 實例訪問互聯網。
  • 如果使用 iptables,可以考慮是否需要安裝 ufw 作為簡化管理的工具,但通常選擇其中一個即可。

01-使用 aws 建設 vpn
https://terryyaowork.github.io/devOps/20241030/4035312234/
作者
Terry Yao
發布於
2024年10月30日
許可協議