如今,VPN技術越來越流行。普通用戶使用VPN可以安全地存取互聯網。它還可以幫助繞過本地被封鎖的網站和服務,並防止可能的外部惡意行為。當您連接到 VPN 伺服器時,您的電腦和伺服器之間會有一個安全隧道,外部無法訪問,因此 VPN 伺服器就成為您的 Internet 接入點。目前有很多 VPN 服務,既有免費的也有付費的,但如果由於某種原因它們不適合您,您可以隨時配置自己的 VPN 伺服器。
要運行自己的VPN,你應該 租用VPS伺服器。有不同的軟體可以讓您建立 VPN 連線。它們因支援的作業系統和使用的演算法而有所不同。我們將介紹兩種設定 VPN 伺服器的獨立方法。第一個基於 PPTP 協議,該協議已經被認為是過時的並且不安全,但配置起來非常容易。另一個採用現代安全的軟體 OpenVPN,但需要安裝第三方客戶端應用程式和更徹底的設定過程。
在我們的測試環境中,我們將使用由 Ubuntu Server 18.04 提供支援的虛擬伺服器。將關閉伺服器上的防火牆,因為其配置值得一篇單獨的文章。我們將描述 Windows 10 上的安裝過程。
準備
無論您選擇哪個VPN伺服器,網路存取都將透過作業系統的整合方式設定。為了透過外部服務介面開放網路訪問,您必須允許介面之間的封包轉送並配置網路位址轉換。
若要開啟資料包轉發,請開啟文件 “/etc/sysctl.conf” 並改變 “net.ipv4.ip_forward” 參數值轉換為 1.
為了在不重新啟動電腦的情況下套用更改,請執行以下命令
sudo sysctl -p /etc/sysctl.conf
網路位址轉換是透過 iptables的。首先,執行以下命令檢查外部網路介面的名稱 “ip鏈接秀” - 您將在下一步中需要它。我們的名字是 “ens3”.
在所有本地網路節點的外部介面上啟用網路位址轉換。
sudo iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
注意,您需要指定您伺服器介面的真實名稱,它可以與我們的不同。
預設情況下,iptables 建立的所有規則在伺服器重新啟動後都會重設。為了防止這種情況,請使用 “iptables-持久” 公用事業。安裝以下套件:
sudo apt install iptables-persistent
在安裝過程的某個時刻,您將看到一個配置窗口,建議您保存當前的 iptables 規則。由於規則已經定義,只需確認並單擊 “是” 兩次。從現在起,伺服器重新啟動後規則將自動套用。
PPTP服務器
服務器配置
安裝包:
sudo apt install pptpd
安裝結束後,開啟文件 “/etc/pptpd.conf” 在任何文字編輯器中並像這樣編輯:
option /etc/ppp/pptpd-options #path to the settings file
logwtmp #client connections logging mechanism
connections 100 #number of simultaneous connections
localip 172.16.0.1 #the address that will serve as a client gateway
remoteip 172.16.0.2-200 #range of addresses
之後,編輯文件 “/etc/ppp/pptpd-選項”。大多數參數均採用預設設定。
#name of the service for new client records
name pptpd
#restrict obsolete authentication methods
refuse-pap
refuse-chap
refuse-mschap
#allow a more secure authentication method
require-mschap-v2
#enable encryption
require-mppe-128
#specify dns servers for clients (use any available servers)
ms-dns 8.8.8.8
ms-dns 8.8.4.4
proxyarp
nodefaultroute
lock
nobsdcomp
novj
novjccomp
nologfd
在下一階段,您將需要為客戶端連線建立記錄。假設你想新增一個用戶 “vpn用戶” 與密碼 “1” 並允許他動態尋址。開啟文件 “/etc/ppp/chap-secrets” 並在文件末尾添加以下包含用戶參數的行:
vpnuser pptpd 1 *
“pptpd” value 是我們在文件中指定的服務的名稱 “pptpd 選項”。 代替 “ *” 您可以指定一個固定的IP位址。結果,文件 “chap-secrets” 應該看起來像這樣:
要應用設定重置 PPTP 服務並將其新增至自動載入。
sudo systemctl restart pptpd
sudo systemctl enable pptpd
伺服器配置已完成。
客戶端配置
未結案工單 “開始” - “設置” - 網絡與互聯網 - “ VPN” 並點擊 “新增 VPN 連線”
在開啟的視窗中輸入連線參數,然後點選 “保存”
- VPN 提供者:“Windows(內建)”
- 連線名稱:「vpn_connect」(您可以選擇任意名稱)
- 伺服器名稱或位址:(指定伺服器的外部IP位址)
- VPN 類型:“自動”
- 登入資訊類型:“使用者名稱和密碼”
- 用戶名: vpn用戶 (伺服器上的「chap-secrets」檔案中指定的名稱)
- 密碼: 1 (如“chap-secrets”檔)
儲存參數後,您將在視窗中看到新的VPN連線。左鍵單擊連接並選擇 “連接”。如果連接成功,您將看到 “連接的” 狀態。
在選項中,您將找到客戶端和伺服器的內部位址。場地 “目的地址” 顯示外部伺服器位址。
連接後,伺服器的內部 IP 位址, 172.16.0.1 在我們的例子中,成為所有傳出資料包的預設閘道。
使用任何線上服務,您都可以確保電腦的外部 IP 位址現在與您的 VPN 伺服器的 IP 位址相同。
OpenVPN服務器
服務器配置
讓我們提升目前使用者的權限級別,因為對於進一步的配置,我們將需要 root 存取權限。
sudo -s
安裝所有必要的資料包。我們需要 “Easy-RSA” 資料包來管理加密金鑰。
apt install openvpn easy-rsa iptables-persistent
允許透過 UDP 協定在連接埠 1194 上進行傳入連線並套用 iptables 規則。
sudo iptables -I INPUT -p udp --dport 1194 -j ACCEPT
sudo netfilter-persistent save
建立一個包含從「Easy-RSA」套件複製的檔案的目錄並導航到該目錄。
make-cadir ~/openvpn
cd ~/openvpn
產生公鑰基礎設施 (PKI)。
./easyrsa init-pki
產生憑證授權單位 (CA) 根憑證。
./easyrsa build-ca
在建立過程中,系統會提示您設定並記住密碼。您還需要回答問題並輸入密鑰所有者的資訊。您可以保留方括號中提供的預設值。按“Enter”鍵完成輸入。
產生私鑰和證書請求。作為參數,指定一個任意名稱;在本例中,它是「vpn-server」。
./easyrsa gen-req vpn-server nopass
將通用名稱值保留為預設值。
對產生的伺服器憑證請求進行簽署。
./easyrsa sign-req server vpn-server
這一步回答「是」確認簽名,然後輸入產生根憑證時所建立的密碼。
產生 Diffie-Hellman 參數。這些參數用於伺服器和客戶端之間的安全性金鑰交換。
./easyrsa gen-dh
所有必要的文件都已產生。讓我們在 OpenVPN 工作目錄中建立一個「keys」資料夾來儲存金鑰,並將建立的檔案複製到那裡。
mkdir /etc/openvpn/keys
sudo cp pki/ca.crt pki/issued/vpn-server.crt pki/private/vpn-server.key pki/dh.pem /etc/openvpn/keys
使用以下方式設定 NAT iptables 規則。建立一個名為 nat 並在 /etc/openvpn/ 目錄。
#!/bin/sh
# Reset firewall settings
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
# (eth0 in our case, may vary)
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# (eth0 in our case, may vary)
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
# Allow OpenVPN connections (eth0 in our case, may vary)
iptables -A INPUT -i eth0 -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -i tun0 -j ACCEPT
# (eth0 in our case, may vary):
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
# (eth0 in our case, may vary)
iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Enable masquerading for the local network (eth0 in our case, may vary)
iptables -t nat -A POSTROUTING -o eth0 -s 10.8.0.0/24 -j MASQUERADE
# Deny incoming connections from outside
iptables -A INPUT -i eth0 -j DROP
# Deny transit traffic from outside (eth0 in our case, may vary)
iptables -A FORWARD -i eth0 -o tun0 -j DROP
sudo netfilter-persistent save
儲存檔案並使其可執行。
sudo chmod 755 /etc/openvpn/nat
複製伺服器配置模板。
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/
打開文件 “/etc/openvpn/server.conf” 為了進行編輯,請確保它包含以下行,並根據需要編輯它們:
#Port, protocol, and interface
port 1194
proto udp
dev tun
#Path to the encryption keys
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/vpn-server.crt
key /etc/openvpn/keys/vpn-server.key
dh /etc/openvpn/keys/dh.pem
#SHA256 Hashing Algorithm
auth SHA256
#Switching off additional encryption
#tls-auth ta.key 0
#Network parameters
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
#Ping every 10 seconds to check the connection.
keepalive 10 120
#Set up AES-256 encryption for the tunnel.
cipher AES-256-GCM
#Demoting the service OpenVPN after launch
user nobody
group nogroup
#Switching on parameters saving after reboot
persist-key
persist-tun
#Set log verbosity
verb 3
#Redirecting logs
log-append /var/log/openvpn/openvpn.log
#Script the rule installation launch.
up /etc/openvpn/nat
在伺服器上啟用流量轉送。
sudo sysctl -w net.ipv4.ip_forward=1
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
啟動 OpenVPN 以套用設定。
systemctl restart openvpn@server
伺服器配置已完成!
客戶端配置
前往OpenVPN官方網站“https://openvpn.net”,轉到 “社區” 部分。
向下捲動並下載適用於您的作業系統版本的安裝程式。在我們的例子中,它是 Windows 11 ARM64。
安裝應用程式時,所有參數均保留預設設定。
在下一個階段,您需要在伺服器上準備以下檔案並將其傳輸到客戶端電腦:
- 公鑰和私鑰;
- 認證中心密鑰的副本;
- 設定檔模板。
連接到伺服器,提升權限,並導航到我們創建的目錄 "~/openvpn".
sudo -s
cd ~/openvpn
為客戶端產生私鑰和憑證請求。參數中指定任意名稱;在本例中為「client1」。
./easyrsa gen-req client1 nopass
輸入我們在建立根憑證時設定的密碼,並將 Common Name 值保留為預設值。
對產生的客戶端憑證請求進行簽署。
./easyrsa sign-req client client1
這一步回答「是」確認簽名,然後輸入產生根憑證時所建立的密碼。
為了方便起見,我們在主目錄中建立一個名為「client1」的資料夾,並將所有要傳輸到客戶端電腦的檔案複製到其中。
mkdir ~/client1
cp pki/issued/client1.crt pki/private/client1.key pki/ca.crt ~/client1/
將客戶端設定檔範本複製到同一目錄。將檔案副檔名更改為 “ .ovpn” 複製時。
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client1/client.ovpn
更改目錄和所有檔案的擁有者 “〜/ client1 /” 能夠將它們分發給客戶。讓我們 “米哈伊爾” 在我們的案例中是所有者。
chown -R mihail:mihail ~/client1
轉到客戶端計算機並複製 “〜/ client1 /” 資料夾。你可以藉助 “PSCP” 實用程序,與 Putty 配合使用。
PSCP -r mihail@[IP_сервера]:/home/mihail/client1 c:\client1
您可以儲存密鑰文件 “ca.crt”, “客戶端1.crt”, “client1.key” 無論你想要什麼。在我們的例子中,它們位於此資料夾中 “c:\Program Files\OpenVPN\keys”,我們模式化設定檔 “客戶端.ovpn” 到 “c:\Program Files\OpenVPN\config” 目錄。
現在讓我們開始配置客戶端。開啟文件 “c:\Program Files\OpenVPN\config\client.ovpn” 在文字編輯器中編輯以下行:
#announce that this is the client
client
#interface and protocol just like on the server
dev tun
proto udp
#IP address of the server and port
remote ip_address 1194
#saving parameters after reload
persist-key
persist-tun
#key paths
ca “c:\\Program Files\\OpenVPN\\keys\\ca.cert”
cert “c:\\Program Files\\OpenVPN\\keys\\client1.crt”
key “c:\\Program Files\\OpenVPN\\keys\\client1.key”
#enable server verification
remote-cert-tls server
#disable extra encryption
#tls-auth ta.key 1
cipher AES-256-CBC
auth-nocache
verb 3
其餘部分保持不變。
儲存檔案並啟動客戶端應用程式 “OpenVPN 圖形使用者介面”.
右鍵單擊任務欄中的應用程式圖標,然後選擇 “連接”。如果連接成功,圖示將變為綠色。
使用任何線上服務可確保您的公用 IP 位址已變更並且現在與伺服器的 IP 位址相同。