iptables,wireguard:VPN 和 LAN 之間的 2 路路由
我正在使用 WireGuard 設置 VPN,並且在相應的 VPN 伺服器上配置我的防火牆時卡住了。我想要以下功能:
- VPN 設備 (
10.6.0.0/24
) 可從 LAN (10.20.0.0/24
) 獲得(問題!)10.20.0.0/24
可從 VPN ( ) 獲得的LAN 設備 (10.6.0.0/24
)(有效!)目前的 iptables 配置:
向任何方向轉發來自現有(已打開)連接的所有流量
iptables -t filter -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
這使得 LAN 設備可以從 VPN 獲得(工作正常)
# Direction: VPN -> LAN ------------------------------------------------------------- iptables -t nat -A PREROUTING -d 10.20.0.0/24 -j DNAT --to-destination 10.6.0.1 # Act as destination NAT from VPN to LAN (be the LAN-gateway for the VPN) iptables -t filter -A FORWARD -s 10.6.0.0/24 -d 10.20.0.0/24 -j ACCEPT # Accept traffic from VPN to LAN iptables -t nat -A POSTROUTING -s 10.6.0.0/24 -d 10.20.0.0/24 -j MASQUERADE # Mask traffic from VPN to LAN for responses
這將使 VPN 設備可以從 LAN 中使用(需要幫助!)
# Direction: LAN -> VPN ------------------------------------------------------------- iptables -t filter -A FORWARD -s 10.20.0.0/24 -d 10.6.0.0/24 -j ACCEPT # Accept traffic from LAN to VPN iptables -t nat -A POSTROUTING -s 10.20.0.0/24 -d 10.6.0.0/24 -j MASQUERADE # Mask traffic from LAN to VPN for responses
目前的發現:
通過查看這些規則,我可能在下部錯過了另一個 DNAT/SNAT,但我仍然無法弄清楚……
VPN 介面上的介面計數器顯示,ping 被發送到 VPN 客戶端並返回!所以問題似乎是到達的 VPN 數據包要被轉換並轉發到 LAN。
如果需要更多資訊,請詢問:) 感謝您的寶貴時間!
問題已解決
正如@MichaelHampton 上面正確評論的那樣,在這種情況下不需要NAT。整個任務僅僅是正確路由的問題,而不是 NAT-ing。
問題的根源
為了讓客戶端能夠連接到 LAN (
10.20.0.0/24
),您必須將此子網添加到AllowedIPs
伺服器配置中的指令中才能被允許。然而,這會自動為相應的子網設置一條新路由,覆蓋原始路由。結果:您的伺服器無法再訪問 LAN 子網中的主機,這導致所有連接嘗試都失敗:
Destination Gateway Genmask Flags Metric Ref Use Iface -ok-> 10.6.0.0 0.0.0.0 255.255.255.0 U 0 0 0 wg0 -!!-> 10.20.0.0 0.0.0.0 255.255.255.0 U 0 0 0 wg0 -ok-> 10.20.0.0 0.0.0.0 255.255.255.0 U 303 0 0 wlan0
由於此路由的度量為 0(低於下面預設路由的度量),因此該路由將始終是首選,並且無法嘗試連接到 LAN。
永久決議
就我而言,我只是在我的
/etc/wireguard/wg0.conf
:PostUp = route del -net 10.20.0.0/24 dev wg0
這刪除了每次wireguard重新啟動時將創建的路由。這需要對所有不是 VPN 子網的子網進行,並且不應被覆蓋。
**編輯:**您可以添加
Table=off
到您的/etc/wireguard/wg0.conf
和 WireGuard 將停止弄亂您的路由表 :)總而言之,這是一次相當傷腦筋的經歷。我很確定會編寫一個腳本來處理這些事情,使 WireGuard 更加“即插即用”:)