當 VPN 在 DD-WRT 路由器和單獨的 VPN/直接客戶端上停止時,如何阻止網際網路訪問?
我正在使用 DD-WRT 3.0 路由器通過 openVPN 進行連接。在 LAN 中,192.168.1.50 是一個不應該通過 VPN 的設備。
(如何將防火牆設置為 192.168.1.50 不通過 VPN 以及 當 VPN 斷開/斷開時如何使所有其他 IP 失去 WAN 連接?)
或者
(創建兩個子網,一個通過 VPN(wi-fi 設備),另一個直接(有線設備) , 當 VPN 掉線時讓 VPN 子網失去 WAN 連接)
我對這兩種設置都沒有偏好。什麼都容易。
此規則不起作用(對於第一種情況):
iptables -I FORWARD ! -o tun1 -s 192.168.1.50 -j DROP
這是正在使用的路由表,路由器處於網關模式:
DD-WRT 論壇中的某個人幫助我以最好(最簡單)的方式解決了這個問題。
基於策略的路由是解決問題的選擇性 VPN 隧道部分的正確方法。它是您指定 OpenVPN 連接詳細資訊的欄位之一。您必須在此處輸入您想要通過 VPN 的設備。請注意,由於 DD-WRT 中的錯誤,路由器本身的 IP 不能在此列表中。
所以我設置了以下內容:
- DHCP 提供 1 到 127。
- 我想在 VPN 上使用的所有設備都分配了靜態 IP >127
- 不應通過 VPN 的設備應獲得 <128 的靜態 IP 或僅接收 DHCP IP,該 IP <128
- 基於策略的路由CIDR 是 192.168.1.128/25 (這意味著將所有 IP > 127 的設備通過 VPN)
現在對於問題的第二部分,**當 VPN 關閉/失敗時,拒絕 WAN 訪問應該在 VPN 上的設備,可以通過在“**保存防火牆”部分輸入以下命令來完成:
iptables -I FORWARD -s 192.168.1.128/25 -o $(nvram get wan_iface) -m state --state NEW -j REJECT --reject-with icmp-host-prohibited iptables -I FORWARD -p tcp -s 192.168.1.128/25 -o $(nvram get wan_iface) -m state --state NEW -j REJECT --reject-with tcp-reset
關於上述命令的兩個注意事項:
- 它使用
REJECT
而不是DROP
因為前者比後者更友好。DROP
不響應並要求客戶端超時,這對使用者來說可能很煩人。相反,REJECT
導致客戶端立即退出。- 檢查的連接狀態是
NEW
。通過檢查 NEW,我們阻止了這些設備啟動出站連接,但不會阻止它們被遠端訪問並通過 WAN 發送回复(至少在 VPN 關閉時)。如果您想阻止遠端訪問以及--state NEW
從這些規則中刪除。
要阻止普通 WAN 上客戶端的所有出站流量,您可以使用 nvram 變數
get wan_iface
IPV4_WAN=$(nvram get wan_iface) iptables -I FORWARD -s 192.168.x.x/24 -o "$IPV4_WAN" -j DROP
您需要定義特定的 IPv4 子網,注意不要阻塞整個 LAN 範圍!
這將阻止任何超出路由器的出站流量,當不在 VPN 介面上時,您可以通過
traceroute
對任何外部 IPv4 地址進行確認,您會發現在第一跳後流量將下降。對於您的特定 IPv4 客戶端,我有點困惑。您不能為要訪問 VPN 的客戶端創建 IPv4 子網,然後根據范圍確保
192.168.1.50
客戶端不在其中嗎?然後只需添加一條ACCEPT
規則以允許它正常使用 WAN 嗎?iptables -I FORWARD -s 192.168.1.50 -o "$IPV4_WAN" -j ACCEPT