我有一個位於 192.168.1.5 的 Debian Jessie 盒子,連接到運行 OpenVPN 用戶端的路由器(位於 192.168.1.1)(它實際上是一個使用這個設定。唯一不同的是,由於路由器的原因,Pi 的 eth0 IP 是靜態的,即 Pi 使用路由器的 DHCP)。
當 LAN 用戶端設定為使用 192.168.1.5 作為其網關時,它們將按預期位於 VPN 上。
我需要的是讓 192.168.1.128/25 內的 LAN 用戶端將所有流量重新導向到 192.168.1.5,甚至當他們的 IP 由路由器的 DHCP 設定時他們的網關變成 192.168.1.1。換句話說,192.168.1.128/25 內的客戶端應該像其網關是 192.168.1.5 一樣工作。
路由器需要做什麼iptables
和/或route add
設定才能做到這一點(路由器運行Tomato 3.4-138)?這些是路由器設定:
iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
WANPREROUTING all -- 0.0.0.0/0 wan_ip
upnp all -- 0.0.0.0/0 wan_ip
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0
SNAT all -- 192.168.1.0/24 192.168.1.0/24 to:192.168.1.1
SNAT all -- 172.16.1.0/24 172.16.1.0/24 to:172.16.1.1
Chain WANPREROUTING (1 references)
target prot opt source destination
DNAT icmp -- 0.0.0.0/0 0.0.0.0/0 to:192.168.1.1
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 to:192.168.1.1:443
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2222 to:192.168.1.5:22
DNAT all -- 0.0.0.0/0 0.0.0.0/0 to:192.168.1.4
Chain pupnp (0 references)
target prot opt source destination
Chain upnp (1 references)
target prot opt source destination
DNAT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:55355 to:192.168.1.130:55355
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:55355 to:192.168.1.130:55355
DNAT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:5353 to:192.168.1.48:5353
DNAT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:4500 to:192.168.1.48:4500
iptables-L
Chain INPUT (policy DROP)
target prot opt source destination
DROP all -- anywhere anywhere state INVALID
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
shlimit tcp -- anywhere anywhere tcp dpt:ssh state NEW
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere tcp dpt:https
Chain FORWARD (policy DROP)
target prot opt source destination
all -- anywhere anywhere account: network/netmask: 192.168.1.0/255.255.255.0 name: lan
all -- anywhere anywhere account: network/netmask: 172.16.1.0/255.255.255.0 name: lan1
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
DROP all -- anywhere anywhere state INVALID
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
DROP all -- anywhere anywhere
DROP all -- anywhere anywhere
wanin all -- anywhere anywhere
wanout all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
upnp all -- anywhere anywhere
ACCEPT all -- anywhere SIP-Device
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain shlimit (1 references)
target prot opt source destination
all -- anywhere anywhere recent: SET name: shlimit side: source
DROP all -- anywhere anywhere recent: UPDATE seconds: 60 hit_count: 4 name: shlimit side: source
Chain upnp (1 references)
target prot opt source destination
ACCEPT udp -- anywhere client-1 udp dpt:55355
ACCEPT tcp -- anywhere client-1 tcp dpt:55355
ACCEPT udp -- anywhere client-2 udp dpt:mdns
ACCEPT udp -- anywhere client-2 udp dpt:4500
Chain wanin (1 references)
target prot opt source destination
ACCEPT tcp -- anywhere *Pi* tcp dpt:ssh
Chain wanout (1 references)
target prot opt source destination
路線
(路由器位於 WAN 數據機後方)
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
modem.ip.0.1 * 255.255.255.255 UH 0 0 0 vlan2
192.168.1.0 * 255.255.255.0 U 0 0 0 br0
172.16.1.0 * 255.255.255.0 U 0 0 0 br1
modem.ip.0.0 * 255.255.224.0 U 0 0 0 vlan2
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
default modem.ip.0.1 0.0.0.0 UG 0 0 0 vlan2
答案1
您無法以某種方式將路由器和 RaspPi 連接到相同 LAN 網段,並期望 RaspPi 會重寫其他用戶端傳送到 LAN 的封包。這似乎是常見問題解答,人們嘗試使用 ARP 欺騙之類的方法。但網路並不是這樣運作的。
乾淨的解決方案是將所有東西放在在後面樹莓派:
Router --- [eth0] RaspPi [eth1] --- Switch +--- Client1
+--- Client2
+--- Client3
基本上你想將你的 RaspPi 作為第二個路由器。這意味著它需要第二個 LAN 介面。在您的路由器上放置一個 DHCP 伺服器,可能在 VPN 的 RaspPi 上啟用 NAT 無法處理子網,然後一切就完成了。
另一種方法是啟動 VPN在路由器本身,如果您可以獲得 root 存取權或刷新 OpenWRT 等。
另一個選擇是停用路由器上的 DHCP 伺服器,然後您可以將 RaspPi 和路由器連接到同一 LAN 網段,並且只需要 RaspPi 上的 LAN 介面。