我使用 TAP(而不是 TUN)設備在我的家庭網路上設定了 OpenVPN 伺服器,這樣遠端連接到網路的用戶端將橋接到與我的(有線)家庭網路相同的子網路。
然而,我有一台筆記型電腦,我在家中使用乙太網路連接,並在其他地方使用 WiFi(我盡量不在家裡使用 WiFi——這對擁擠的曼哈頓公寓大樓來說是一場災難)。我還喜歡為網路上的每個設備設置固定的 IP 位址,因此我修復了其乙太網路適配器的 IP 配置,並在連接到 VPN 時為 TAP 設備使用相同的 IP(使用客戶端配置目錄在伺服器端)。
有沒有一種好的且最低限度的黑客方式來將我的筆記型電腦上的 OpenVPN 服務配置為僅在以太網連接未激活時連接到 OpenVPN?讓 OpenVPN 服務自動在後台運行非常方便,我不想每次連接到以太網時都必須手動關閉它,但讓它嘗試連接到我已經物理連接的同一網絡使用我已經使用的相同IP 地址的VPN 顯然不是一個好主意......
我確信我可以用 init 腳本來破解一些東西,但我想盡可能地減少與官方 Ubuntu 配置的差異。如果有人能想到更「正確」的方法,我將非常感激。
答案1
我嘗試找到了一個恰好適合我的配置的解決方案。這不是一個完全通用的解決方案,因此希望有人能夠提供更強大的解決方案。
我沒有在乙太網路上停用筆記型電腦上的 OpenVPN,而是在網路的 OpenVPN 伺服器上配置了 ufw(簡單防火牆)以拒絕來自本地子網路的連線;不過,它比起只使用sudo ufw allow ...
and創建規則要複雜一點sudo ufw deny ...
:
首先,如果您在將 VPN 橋接到本機網路的電腦上執行 ufw(我正在這樣做),則需要設定 ufw 以允許轉送流量,因為它預設會丟棄流量。這意味著更改
DEFAULT_FORWARD_POLICY="DROP"
為DEFAULT_FORWARD_POLICY="ACCEPT"
in/etc/default/ufw
。其次,您需要確保以正確的順序添加規則; ufw 會一一處理規則,並使用您拒絕子網路內與 OpenVPN(連接埠 1149)的連線的規則,然後僅在您按照該順序建立它們時才允許來自外部的連線;就我而言,這意味著
sudo ufw delete deny from 192.168.16.0/20 to any port 1194
在運行之前運行(不,這不是拼寫錯誤,我實際上在本地使用 /20 子網路:D)sudo ufw allow 1194
。最後,您需要確保來自本地網路的連接實際上做看起來它們來自您的本地網絡,因此 ufw 規則被調用。
最後一部分很重要,因為最初我嘗試前兩個步驟時並非如此;我的筆記型電腦 OpenVPN 會自動設定為嘗試連接到我的 VPN(位於 )mydomainname.com
,該 VPN 會動態分配給我的家庭路由器,而路由器又將連接埠 1194 轉送到執行我的 VPN(位於 )的電腦192.168.16.1
。並非所有路由器都是這種情況,但至少對於我的路由器來說,mydomainname.com
從本地子網內進行連接會創建到OpenVPN 伺服器的連接,該伺服器看起來具有路由器的IP 位址,而不是筆記型電腦的IP 位址。 (這是一個很長的故事,但我實際上希望允許從連接到路由器的其他裝置在不同的子網路上進行 VPN 存取 - 我的家庭設定非常複雜:D)。
在我的例子中,解決方案最終是使用靜態分配來設定路由器的 DNS 伺服器 to mydomainname.com
,192.168.16.1
以便mydomainname.com
直接解析到192.168.16.1
但不解析到我的路由器的外部 IP。這對我有用,但你的里程可能會有所不同。