透過預設路由從一台伺服器轉送 IP

透過預設路由從一台伺服器轉送 IP

我有一個設備(IP 10.110.1.3),設定了以下規則:

$ ip route
default via 10.110.1.4 dev wlan0 onlink

我在兩台機器上都啟用了 ipv4 轉送。兩台機器可以互相交談。

這是我的 iptables。我想從介面 wlp0s20u1 路由到 wlp3s0:

$ iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

$ iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -o wlp3s0 -j MASQUERADE

「路由」設備10.110.1.4上的路由:

$ ip route
default via 192.168.1.1 dev wlp3s0  proto static 
10.110.1.0/24 dev wlp0s20u1  proto kernel  scope link  src 10.110.1.4 
192.168.1.0/24 dev wlp3s0  proto kernel  scope link  src 192.168.1.110  metric 600 

使用“if interface”路由 get,很明顯這永遠不會起作用:

$ ip route get to 192.168.1.1 from 10.110.1.3 iif wlp0s20u1
RTNETLINK answers: No route to host

$ ip route get to 8.8.8.8 from 10.110.1.3 iif wlp0s20u1
RTNETLINK answers: No route to host

我注意到路線src 192.168.1.110上的192.168.1.0,並嘗試添加以下路線來解決此問題:

$ sudo ip route add 192.168.1.1/32 dev wlp3s0

但這也沒有幫助。

我使用 tcpdump 來分析 icmp,這樣我就可以看到我的 ping 的方向。

$ tcpdump -i wlp0s20u1 -n icmp
listening on wlp0s20u1, link-type EN10MB (Ethernet), capture size 262144 bytes
18:13:19.355166 IP 10.110.1.3 > 8.8.8.8: ICMP echo request, id 32366, seq 1, length 64
18:13:20.359770 IP 10.110.1.3 > 8.8.8.8: ICMP echo request, id 32366, seq 2, length 64

tcpdump -i wlp3s0 -n icmp                                             
listening on wlp3s0, link-type EN10MB (Ethernet), capture size 262144 bytes

除非我從「路由器」電腦執行 ping 操作,否則 wlp3s0 介面上沒有任何內容。

很明顯,這裡的問題是核心不知道將封包從 wlp0s20u1 路由到 wlp3s0。但我不確定如何讓它做到這一點。我嘗試明確添加路由來告訴它執行此操作,但它似乎不起作用。

如果我發送以下垃圾郵件,則只有預先路由資料包計數器會上升(在嘗試 ping 時);

$ iptables -t nat -v -L -n

Chain PREROUTING (policy ACCEPT 775 packets, 50740 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 24 packets, 1920 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 95 packets, 23073 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 5 packets, 1000 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   90 22073 MASQUERADE  all  --  *      wlp3s0  0.0.0.0/0            0.0.0.0/0 

任何幫助是極大的讚賞!

編輯:簡化的解釋

我有三台設備:

  • A:WiFi路由器192.168.1.1
  • B:具有兩個 wifi 卡的電腦:192.168.1.1 網路上的 wlp3s0,以及 10.110.1.0/24 網路上的 wlp0s20u1。
  • C:純粹使用 10.110.1.0/24 WiFi 網路的電腦。

我試圖允許 C 透過兩跳與互聯網 (0.0.0.0/0) 通信,首先到 B,然後到 A,然後到互聯網。

問題是讓 B 將封包從 wlp3s20u1 路由到 wlp3s0。

答案1

解決方案是在特定介面上啟用轉送。由於某種原因它沒有啟用。

sudo sysctl net.ipv4.conf.wlp3s0.forwarding=1
sudo sysctl net.ipv4.conf.wlp0s20u1.forwarding=1

相關內容