我正在嘗試設定我的 Raspberry Pi,以允許我存取連接到 eth0 或 wlan1 的裝置。
想要的功能是這樣的:
- 使用者透過 wlan1 連接到 RPi AP 並獲得 IP (192.168.4.x)
- 獨立設備透過 eth0 連接到 RPi 並獲得 IP (192.168.5.x)
- 使用者可以透過其本地IP位址存取eth0連接設備的設定介面
我已經使用 dnsmasq 在每個介面上設定 DHCP 伺服器,它們非常樂意提供 IP;
# dnsmasq.conf
interface=wlan1
dhcp-range=wlan1,192.168.4.2,192.168.4.99,24h
interface=eth0
dhcp-range=eth0,192.168.5.1,192.168.5.99,24h
listen-address=::1,127.0.0.1,192.168.5.1,192.168.4.1
我還更新了 iptables 以在介面之間轉送流量;
sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -i wlan1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o wlan1 -j ACCEPT
然而,當涉及到實際存取不同的 IP 時,我仍然有點迷失。我相信我需要設置一些路線,但我正在努力弄清楚如何準確地實現這一點。
透過 wlan0 連接 Ping 192.168.4.x 和 192.168.5.x IP:
以及來自 eth0 連接的 ...4.x 和 ...5.x:
iptables 和 netstat 輸出:
pi@rak-gateway:~ $ sudo iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
pi@rak-gateway:~ $ netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 wlan0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
192.168.4.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan1
192.168.5.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
答案1
然而,當涉及到實際存取不同的 IP 時,我仍然有點迷失。我相信我需要設置一些路線,但我正在努力弄清楚如何準確地實現這一點。
關於路由要記住的一點是路徑上的每台計算機必須知道將特定資料包發送到哪裡。
因此,如果 A 以 192.168.4.x 連接到 RaspPi,B 以 192.168.5.y 連接到 RaspPi,則
- 必須知道寄往 192.168.5.*/24 的封包會轉到 192.168.4.? RaspPi 的位址。
- B、當它應答時,必須知道發往 192.168.4.*/24 的封包會轉到 192.168.5.? RaspPi 的位址。
如果 A 和 B 僅連接到 RaspPi,並將 RasPi IP 位址設定為預設網關,則您可以免費獲得此服務。如果不是這種情況,例如因為 A 和 B 也連接到其他設備,或者因為您沒有設定dnsmasq
通告預設網關,那麼您需要設定路由分別在 A 上。乙。
您可以直接在 A 或 B 上靜態執行此操作,或者使用 DHCP 來分發路由(第一個 google 鏈接,了解操作方法這裡,谷歌了解更多)。
無論如何,調試應該包括查看路線在 A 和 B 上(在 Linux 上,您可以使用ip route get 1.2.3.4
,其中 1.2.3.4 是目標位址)。
答案2
感謝您的更新。
我建議的第一件事是您將eth0
DHCP 範圍固定為起始於192.168.5.2
- 目前似乎起始於192.168.5.1
。
接下來要發佈的是 via 連接的設備的路由表eth0
,以及 via 連接的設備的路由表wlan1
。
在取得路由表之前,請確保兩台裝置均已成功執行 DHCP,並且在您期望的子網路中擁有位址。