知識庫 使用 Profitserver 服務的簡單說明
主要 知識庫 Linux 上的 VPN 伺服器設定:PPTP 還是 OpenVPN?

Linux 上的 VPN 伺服器設定:PPTP 還是 OpenVPN?


如今,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 link show」檢查外部網路介面的名稱-下一步會用到它。我們的介面名稱是“ens3”。

在所有本地網路節點的外部介面上啟用網路位址轉換。

sudo iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE

注意,您需要指定您伺服器介面的真實名稱,它可以與我們的不同。

預設情況下,iptables 建立的所有規則會在伺服器重新啟動後重設。為了防止這種情況發生,請使用「iptables-persistent」工具。安裝以下軟體包:

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-options”。大多數參數都是預設的。

#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

下一步,您需要建立客戶端連線記錄。假設您想要新增一個名為「vpnuser」的用戶,密碼為「1」,並允許其使用動態尋址。開啟檔案「/etc/ppp/chap-secrets」,並在檔案末端新增以下包含使用者參數的行:

vpnuser pptpd 1 *

「pptpd」的值是我們在「pptpd-options」檔案中指定的服務名稱。您可以用一個固定的IP位址來取代「*」。最終,“chap-secrets”檔案應該如下所示:

若要套用這些設置,請重置pptpd服務並將其新增至自動載入清單。

sudo systemctl restart pptpd
sudo systemctl enable pptpd

伺服器配置已完成。

客戶端配置

開啟「開始」功能表- 「設定」 - 「網路和 Internet」 - “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

這一步回答「是」確認簽名,然後輸入產生根憑證時所建立的密碼。

vpn-setup-linux_10_ru

產生 Diffie-Hellman 參數。這些參數用於伺服器和客戶端之間的安全性金鑰交換。

./easyrsa gen-dh
vpn-setup-linux_9_ru

所有必要的文件都已產生。讓我們在 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 ”,進入“社區”部分。

vpn-setup-linux_12_ru

向下捲動並下載適用於您的作業系統版本的安裝程式。在我們的例子中,它是 Windows 11 ARM64。

vpn-setup-linux_13_ru

安裝應用程式時,所有參數均保留預設設定。

在下一個階段,您需要在伺服器上準備以下檔案並將其傳輸到客戶端電腦:

  • 公鑰和私鑰;
  • 認證中心密鑰的副本;
  • 設定檔模板。

連接到伺服器,提升權限,並導航到我們創建的目錄 "~/openvpn".

sudo -s

cd ~/openvpn

為客戶端產生私鑰和憑證請求。參數中指定任意名稱;在本例中為「client1」。

./easyrsa gen-req client1 nopass

輸入我們在建立根憑證時設定的密碼,並將 Common Name 值保留為預設值。

vpn-setup-linux_14_ru

對產生的客戶端憑證請求進行簽署。

./easyrsa sign-req client client1

這一步回答「是」確認簽名,然後輸入產生根憑證時所建立的密碼。

vpn-setup-linux_15_ru

為了方便起見,我們在主目錄中建立一個名為「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/”及其所有檔案的擁有者,以便能夠將它們分發給客戶端。在本例中,我們將所有者更改為“mihail” 。

chown -R mihail:mihail ~/client1

請前往客戶端計算機,複製“~/client1/”資料夾的內容。您可以使用 PuTTY 自帶的“PSCP”工具來完成此操作。

PSCP -r mihail@[IP_сервера]:/home/mihail/client1 c:\client1

您可以將金鑰檔案「ca.crt」、「client1.crt」和「client1.key」儲存在任何您想要的位置。在本例中,它們位於「c:\Program Files\OpenVPN\keys」資料夾中,我們將設定檔「client.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 GUI”。

右鍵單擊任務欄中的應用程式圖標,然後選擇“連接”。如果連接成功,圖示將變為綠色。

使用任何線上服務可確保您的公用 IP 位址已變更並且現在與伺服器的 IP 位址相同。


向我們諮詢有關 VPS 的問題

無論白天或黑夜,我們隨時準備好解答您的問題。