
我有一個在 Linux Ubuntu 機器上運行的 OpenVPN 伺服器。多個客戶端連接到該伺服器(500+),這就是我設定伺服器橋接選項的原因,如下所示:
server-bridge 10.0.100.1 255.255.0.0 10.0.200.1 10.0.210.254
這非常有效。客戶端獲得一個動態IP位址,當客戶端數量超過255時,它從200塊變成201塊。
我有一個連接到這些客戶端的內部應用程序,但該應用程式在 IP 位址 10.0.200.255 和 10.0.201.0 上崩潰。
這些 IP 位址在我提供的範圍內,但我無法使用它們。
有沒有辦法將它們排除在我的池子之外?
或者我需要改變我的設定嗎?
答案1
使用單一設定檔使用 OpenVPN 的內建 DHCP 伺服器無法直接使用多個 IP 範圍或排除某些 IP。
我提出3種可能的解決方案:
- 解決方法,但不保證有效
- DHCP 代理模式,簡單,乾淨,還有很多其他選擇
- 多個實例,更複雜,可能具有性能優勢
但是,我建議修復問題的根本原因,即有缺陷的內部應用程式。
解決方法
在伺服器設定檔中新增:
server-bridge 10.0.100.1 255.255.0.0 10.0.200.1 10.0.210.254
ifconfig-pool-persist ipp.txt 0
該0
指令末尾的ifconfig-pool-persist
被ipp.txt
視為唯讀設定檔。
建立一個文件/etc/openvpn/ipp.txt
:
reserved-not-used-cn-1,10.0.200.255
reserved-not-used-cn-2,10.0.201.0
reserved-not-used-cn-3,10.0.201.255
...
將所有保留的 IP 位址新增至此文件中,格式為<Common-Name>,<IP-address>
.對於欄位中的值,<Common-Name>
請選擇永遠不會在任何用戶端憑證中使用的值。
正如 OpenVPN 手冊頁面中所述,這並不能保證始終有效:
請注意,OpenVPN 僅將此文件中的條目視為基於公用名稱和 IP 位址之間過去關聯的建議。它們不保證給定的公用名始終會收到給定的 IP 位址。如果您想要保證分配,請使用
--ifconfig-push
DHCP 代理模式
由於您正在使用輕敲設置,這可能是最好的解決方案。它允許使用功能齊全的DHCP伺服器在伺服器端子網或伺服器本身上,取決於配置。若要設定乙太網路橋接,必須先使用作業系統的橋接功能將 TAP 介面與另一個介面橋接。
開放VPN伺服器配置:
server-bridge
該指令擴展如下:
mode server
tls-server
push "route-gateway dhcp"
DHCPD伺服器配置:
subnet 10.0.100.1 netmask 255.255.0.0 {
range 10.0.200.1 10.0.200.254;
range 10.0.201.1 10.0.201.254;
range 10.0.202.1 10.0.202.254;
range 10.0.203.1 10.0.203.254;
...
}
多個實例
另一種方法是/24
使用多個設定檔為每個子網路建立一個單獨的 openvpn 實例。但這需要為每個實例使用不同的連接埠。
實例1設定檔:
port 11941
server-bridge 10.0.100.1 255.255.0.0 10.0.200.1 10.0.200.254
實例2設定檔:
port 11942
server-bridge 10.0.100.1 255.255.0.0 10.0.201.1 10.0.201.254
…
這需要:
- 具有對應連接埠號碼的 IP 範圍特定客戶端配置,
iptables
或例如對連接埠上的傳入連接使用負載平衡1194
並將它們均勻地分佈在實例之間
正如所解釋的,該解決方案可能具有性能優勢這裡。