Iptables
如何將特定客戶端的流量路由到 VPN (PPTP)?
設置:
- 我將伺服器設置為 DHCP(isc-dhcp-server)和 DNS(bind9)伺服器(充當路由器)。
- 它使用 eth0 設備通過 pppoe (ppp0) 連接到網際網路。
- eth1 連接到充當接入點的路由器。
- 通過接入點,客戶端可以通過乙太網或 wifi 連接。
- 來自 eth1 的流量使用此處定義的 iptables 轉發到 ppp0(進行了一些修改以匹配網際網路設備):https ://killtacknine.com/building-an-ubuntu-16-04-router-part-3-firewalls/ 。
- IPV6 也以同樣的方式設置。
- ufw 還通過“Anywhere ALLOW 192.168.1.0/24”規則啟用。
- 伺服器還通過 ppp0 連接到 VPN (PPTP),當它連接時,它會獲取 ppp1 作為設備名稱。
我想做的是將通過 eth1 設備通過 ppp1 連接到 VPN 的特定客戶端的網際網路流量(基於 IP 或 MAC 地址)轉發。
我嘗試使用以下規則設置 iptables:
iptables -A INPUT -i ppp1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i eth1 -s 192.168.1.113 -o ppp1 -j ACCEPT iptables -A FORWARD -i ppp1 -o eth1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -t nat -A POSTROUTING -o ppp1 -j MASQUERADE
但它似乎不起作用,我不知道我錯過了什麼,我對 iptables 的了解幾乎為零。
1)確保通過eth1連接的AP將自己的乙太網介面橋接到WLAN介面,否則DHCP將無用,並且如果它進行NAT(許多家庭路由器預設),您將無法看到IP地址客戶端。
2)你不需要
iptables
做路由(我的一個小毛病;出於某種原因,網際網路上的許多人認為他們需要防火牆規則來路由……)。特別是,您不需要進行 NAT(除非您的 VPN 出於某種原因需要它,但問題中沒有資訊可以決定)。如果要路由**來自特定客戶端的數據包,則需要策略路由(google,有很多教程)。基本上,你會
ip rule add from <source address> lookup <table name>
然後添加一個定義路由的表,在您的情況下,通過
ppp1
和與之關聯的網關。
ip route get <dest address>
會告訴你作業系統認為數據包應該去哪裡。比調試防火牆規則容易得多。3)使用
wireshark
(或者tcpdump
,在不同的視窗中,每個有趣的網路介面一個)調試一切。如果沒有真正看到哪些數據包以哪些地址到達哪裡,就很難判斷出了什麼問題。