Ip

為什麼在 OpenVPN 中分配客戶端靜態 IP 會失敗?

  • August 8, 2017

我正在執行 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 “應該”在伺服器端執行什麼操作以使連接正常工作。

引用自:https://serverfault.com/questions/867333