如何讓我的接入點將流量傳送到192.168.1.0
througheth0
以及所有其他流量傳送到 through tun0
?
我已經設定了 Raspberry Pi VPN 接入點。它與我的所有伺服器位於同一子網路中,192.168.1.0
並且與伺服器一樣,透過電纜連接到我的數據機/路由器。然後,Raspberry Pi 有一個 WIFI 棒 ( wlan0
) 供客戶端連接,它運行自己的子網路192.168.2.0
並使用規則透過我的 VPN 連接 ( )iptables
轉發來自客戶端的所有流量。wlan0
tun0
我透過這樣做來實現這一點;
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
sudo iptables -A FORWARD -i tun0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o tun0 -j ACCEPT
我的問題是,現在透過 wifi 連接到我的接入點的客戶端無法與我的伺服器通訊。我怎樣才能實現這個目標?
| | ¦
| __________________|_______¦_________
| | Modem/Router/DCHP server |
| | 192.168.1.254 |
| |_________________________¦________|
| | ¦
| | ¦
| __________________¦_
| | 8-port switch ¦ |
| |_________________¦_|
| | | ¦
| | | -----------
| ____________________| |__________ ¦
| | eth0| ¦tun0
| __________________ ________________________
| | Server | | Pi VPN Access Point |
| | 192.168.1.79 | | eth0: 192.168.1.81 |
| |________________| | tun0: 10.X.X.X |
| | wlan0:192.168.2.1 |
| |______________________|
| |wlan0
| |
| __________|___________
| | Laptop |
| | wlan0: 192.168.2.2 |
| |____________________|
我已在以下位置更詳細地描述了我的接入點設定:http://www.snabela.net/index.php/2013/11/raspberry-vpn-access-point/
當 AP 用戶端的所有 Internet 流量都透過 VPN 發送時,我需要做什麼才能從筆記型電腦 ssh 到伺服器?我可以添加另一個 iptables 規則嗎?
接入點 ifconfig -a 輸出:
eth0 Link encap:Ethernet HWaddr b8:28:eb:f1:77:93
inet addr:192.168.1.81 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:124292 errors:0 dropped:0 overruns:0 frame:0
TX packets:86097 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:136739836 (130.4 MiB) TX bytes:15199088 (14.4 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:60 errors:0 dropped:0 overruns:0 frame:0
TX packets:60 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:6200 (6.0 KiB) TX bytes:6200 (6.0 KiB)
mon.wlan0 Link encap:UNSPEC HWaddr F8-1B-67-20-B3-61-00-00-00-00-00-00-00-00-00-00
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4760 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:630721 (615.9 KiB) TX bytes:0 (0.0 B)
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.4.43.179 P-t-P:10.4.43.178 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:108875 errors:0 dropped:0 overruns:0 frame:0
TX packets:75807 errors:0 dropped:29 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:126611820 (120.7 MiB) TX bytes:6303503 (6.0 MiB)
wlan0 Link encap:Ethernet HWaddr f8:1b:67:20:b3:61
inet addr:192.168.2.1 Bcast:192.168.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:75019 errors:0 dropped:0 overruns:0 frame:0
TX packets:109376 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:7219164 (6.8 MiB) TX bytes:130045181 (124.0 MiB)
接入點的route -n 輸出:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.4.43.178 128.0.0.0 UG 0 0 0 tun0
0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 eth0
10.4.0.1 10.4.43.178 255.255.255.255 UGH 0 0 0 tun0
10.4.43.178 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
95.211.191.34 192.168.1.254 255.255.255.255 UGH 0 0 0 eth0
128.0.0.0 10.4.43.178 128.0.0.0 UG 0 0 0 tun0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
答案1
我大膽猜測一下,您的預設轉送策略是 REJECT 或 DROP(使用 進行檢查iptables -L FORWARD
)。如果這是正確的,那麼你的整個問題就是這一行:
sudo iptables -A FORWARD -i wlan0 -o tun0 -j ACCEPT
它的作用是接受並轉發任何傳入wlan0
和傳出的內容tun0
。其中不匹配 from 192.168.2.2
to 的封包192.168.1.79
,因為那樣會通過eth0
。
最簡單的方法是刪除該行並將其替換為這兩行,以允許在內部介面之間沿任一方向轉發所有內容:
sudo iptables -A FORWARD -i wlan0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -j ACCEPT
如果您只是想從 VPN 中排除您的伺服器,請新增-o wlan0
到第二行。當然,如果你想增加更多、更嚴格的要求,例如會話建立必須朝某個方向進行等等,這些規則就是需要調整的。玩得開心,並隨身攜帶控制台。 ;-)