為什麼在 OpenVPN 中分配客戶端靜態 IP 會失敗?
我正在執行 OpenVPN 伺服器,我想為特定客戶端分配靜態 IP。
這是我的 server.conf。我認為這會將虛擬 IP 池配置為從 10.5.24.209 到 10.5.24.223。
port 443 proto tcp dev tun sndbuf 0 rcvbuf 0 ca ca.crt cert server.crt key server.key dh dh.pem auth SHA512 tls-auth ta.key 0 topology subnet server 10.5.24.208 255.255.255.240 #This netmask should span IPs .208-.223. ifconfig-pool-persist ipp.txt push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 168.xx.xx.xx" keepalive 10 120 cipher AES-256-CBC comp-lzo user nobody group nogroup persist-key persist-tun status openvpn-status.log verb 3 crl-verify crl.pem client-to-client client-config-dir ccd
這是 的內容
/etc/openvpn/ccd/W7LocalVM
,其中 W7LocalVM 是我的客戶端的通用名稱。我不太明白這個指令的作用,但我認為第一個 IP 應該是我的客戶端所需的靜態 IP,第二個 IP 應該是我的伺服器的 IP。ifconfig-push 10.5.24.210 10.5.24.209
但是,當我嘗試使用此伺服器配置連接我的客戶端時,我收到以下錯誤:
Mon Aug 07 14:07:34 2017 Set TAP-Windows TUN subnet mode network/local/netmask = 10.5.24.208/10.5.24.210/10.5.24.209 [SUCCEEDED] Mon Aug 07 14:07:34 2017 MANAGEMENT: Client disconnected Mon Aug 07 14:07:34 2017 ERROR: --ip-win32 dynamic [offset] : offset is outside of --ifconfig subnet Mon Aug 07 14:07:34 2017 Exiting due to fatal error
我認為 IP 10.5.24.210 將在伺服器端定義的子網內,但我不明白為什麼會出現此錯誤。誰能幫我解決這個問題?
之所以會出現此問題,是因為 openvpn 試圖將您的 ifconfig 選項解析為 ip 後跟子網遮罩。
根據手冊頁:
–拓撲模式
…
subnet – 通過使用本地 IP 地址和子網遮罩配置 tun 介面來使用子網而不是點對點拓撲,類似於 –dev tap 和乙太網橋接模式中使用的拓撲。此模式為每個連接的客戶端分配一個 IP 地址,並且也適用於 Windows。僅當伺服器和客戶端是 OpenVPN 2.1 或更高版本,或已使用 –topology 指令程式碼手動修補的 OpenVPN 2.0.x 時可用。在 Windows 上使用時,需要 8.2 或更高版本的 TAP-Win32 驅動程序。在 *nix 上使用時,要求 tun 驅動程序支持 ifconfig(8) 命令,該命令設置子網而不是遠端端點 IP 地址。
此選項存在於 OpenVPN 2.1 或更高版本中。
注意:使用 –topology subnet 會將 –ifconfig 參數的解釋更改為“地址網路遮罩”,不再是“本地遠端”。
–ifconfig l rn
設置 TUN/TAP 適配器參數。l 是本地 VPN 端點的 IP 地址。對於點對點模式的 TUN 設備,rn 是遠端 VPN 端點的 IP 地址。對於 TAP 設備或與 –topology subnet 一起使用的 TUN 設備,rn 是正在創建或連接的虛擬網段的子網遮罩。對於有助於虛擬點對點 IP 連接的 TUN 設備(在 –topology net30 或 p2p 模式下使用時), –ifconfig 的正確用法是使用兩個不屬於任何現有子網的私有 IP 地址正在使用中。IP 地址可能是連續的,並且應該在遠端對等方上顛倒它們的順序。VPN 建立後,通過 ping rn,您將在 VPN 上進行 ping。
對於 TAP 設備,它提供….
在您的伺服器程式碼中,您將拓撲設置為
subnet
,然後使用該server
語句將其推送到客戶端。根據上述文件,您需要將以下內容添加到“/etc/openvpn/ccd/W7LocalVM”中,而不是使用“本地”、“遠端”地址推送您的 ifconfig:
ifconfig-push 10.5.24.210 255.255.255.252 push route 10.5.24.210 255.255.255.252 # ifconfig 10.5.24.209 255.255.255.252
最後一行可能不需要,但作為範例,ifconfig-push “應該”在伺服器端執行什麼操作以使連接正常工作。