目前,我正在尝试连接两个本地网络,因为似乎两个网络彼此不认识。
以下是网络设置:
我的家庭本地网络:192.168.0.0/24 Rasperry Pi 作为接入点
使用它自己的网络的点(用于 DHCP 功能等):192.168.1.0/24
Raspberry Pi 设置:
- eth0:未连接
- wlan0:192.168.0.117
- WLAN1:192.168.1.1
- 将 RasPi 192.168.1.1 ping 至 RasPi 客户端 192.168.1.2 => 成功
- 将 RasPi 192.168.0.117 ping 至 PC 192.168.0.120 => 成功
- 对 RasPi 192.168.0.117 执行 ping 操作以连接到 Google (http://www.google.de) => 成功
电脑设置:
- RJ45 连接:192.168.0.120
- WiFi:未连接
- 将 PC 192.168.0.120 ping 至 RasPi 192.168.0.117 => 成功
- 将 PC 192.168.0.120 ping 至 RasPi 192.168.1.1 => 成功
- 对 PC 192.168.0.120 执行 ping 操作以连接到 Google (http://www.google.de) => 成功
任何 RasPi 客户端(例如我的 iPhone4S,它应该使用 RasPi WiFi 网络)设置:连接到 RasPi WiFi(192.168.1.0/24):
- 无线网络:192.168.1.2
- 将 RasPi 客户端 192.168.1.2 ping 至 PC 192.168.0.120 =>不成功(超时)
- 将 RasPi 客户端 192.168.1.2 ping 至 RasPi 192.168.0.117 => 成功
- 将 RasPi 客户端 192.168.1.2 ping 至 RasPi 192.168.1.1 => 成功
- Ping RasPi 客户端 192.168.1.2 到 Google(http://www.google.de)=>不成功(超时)
连接到路由器(家庭)WiFi(与 PC 192.168.0.0/24 相同的网络)
- 无线网络:192.168.0.110
- 将 RasPi 客户端 192.168.0.110 ping 至 PC 192.168.0.120 => 成功
- 将 RasPi 客户端 192.168.0.110 ping 至 RasPi 192.168.0.117 => 成功
- 将 RasPi 客户端 192.168.0.110 ping 至 RasPi 192.168.1.1 =>不成功(超时)
- 对 RasPi 客户端 192.168.0.110 执行 ping 操作以连接到 Google(http://www.google.de) => 成功
我希望两个网络中的所有设备都能互相连接。问题是,我的家庭网络路由器 (192.168.0.1) 不幸没有选项来路由两个网络之间的流量(只能处理端口转发)。
这就是为什么我想使用 RasPi 来路由两个网络之间的流量,因为 RasPi 也是一个网关。
这是 RasPi 的 iptables 设置:
由 iptables-save v1.4.14 于 2014 年 3 月 14 日星期五 23:34:55 生成
*filter
:INPUT ACCEPT [423:33976]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [533:57052]
COMMIT
于 2014 年 3 月 14 日星期五 23:34:55 完成
由 iptables-save v1.4.14 于 2014 年 3 月 14 日星期五 23:34:55 生成
*nat :PREROUTING ACCEPT [3:96]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0]
-A PREROUTING -i wlan1 -p tcp -m tcp --dport 22 -j REDIRECT --to-ports 22
-A PREROUTING -i wlan1 -p udp -m udp --dport 53 -j REDIRECT --to-ports 53
-A PREROUTING -i wlan1 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports 9040 COMMIT
于 2014 年 3 月 14 日星期五 23:34:55 完成
当我的 iPhone 连接到网络 192.168.1.0/24 时,我希望能够 ping 192.168.0.0/24 网络中的 PC。
当我的 iPhone 连接到网络 192.168.0.0/24 时,我希望能够 ping 192.168.1.0/24 网络中的 RasPi。
你知道怎样实现这个目标吗?
欢呼吧,丹
---编辑 1--- 到目前为止,所提建议均无效。到目前为止,我唯一能正常工作的就是 RasPi 客户端的互联网连接,因此可以 ping 到 www.google.de。
我已经编辑了 /etc/network/interfaces 文件:
自动档
iface lo inet 环回
iface eth0 inet dhcp允许热插拔 wlan0
iface wlan0 inet dhcp
wpa-ssid“abcdef”
wpa-psk“123456789”允许热插拔 wlan1
iface wlan1 inet 静态
地址 192.168.1.1
网络掩码 255.255.255.0
子网 192.168.1.0启动 iptables-restore < /etc/iptables.ipv4.nat
启动路由删除默认网关 192.168.1.1 wlan1
启动路由添加默认网关 192.168.0.1 wlan0
路由表现在如下所示:
Ziel 路由器 Genmask 标志 度量标准 参考 使用 Iface
默认 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
192.168.0.0 * 255.255.255.0 U 0 0 0 eth0
192.168.0.0 * 255.255.255.0 U 0 0 0 wlan0
192.168.1.0 * 255.255.255.0 U 0 0 0 wlan1
由于互联网使用此解决方案,我所需要的只是两个子网之间的连接。从 192.168.1.0/24 网络,我仍然无法访问 192.168.0.0/24 网络,只能通过网关 192.168.1.1 访问互联网。
---编辑 1---
---编辑 2---
我现在已从 /etc/network/interfaces 中删除了以下行:
启动路由删除默认网关 192.168.1.1 wlan1
启动路由添加默认网关 192.168.0.1 wlan0
因此我添加了 Lawrence 提到的 iptable 规则。我的 iptable 如下所示:
由 iptables-save v1.4.14 于 2014 年 4 月 7 日星期一 17:51:30 生成
*nat
:PREROUTING ACCEPT [39:1816]
:INPUT ACCEPT [1:384]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -i wlan1 -p tcp -m tcp --dport 22 -j REDIRECT --to-ports 22
-A PREROUTING -i wlan1 -p udp -m udp --dport 53 -j REDIRECT --to-ports 53
-A PREROUTING -i wlan1 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT
--to-ports 9040
-A POSTROUTING -o wlan0 -j MASQUERADE
COMMIT
于 2014 年 4 月 7 日星期一 17:51:30 完成
由 iptables-save v1.4.14 于 2014 年 4 月 7 日星期一 17:51:30 生成
*filter
:INPUT ACCEPT [28:3580]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [30:3192]
-A INPUT -i lo -j ACCEPT
-A INPUT -i wlan1 -j ACCEPT
-A FORWARD -i wlan1 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT -A
OUTPUT -o wlan1 -j ACCEPT
COMMIT
于 2014 年 4 月 7 日星期一 17:51:30 完成
注意:这三个 PREROUTING 规则对于在我的 Pi 上运行的 TOR 代理是必需的。
结果:互联网连接正常,但仍然无法从 192.168.1.0/24 访问 192.168.0.0/24。 ---编辑 2---
---编辑 3---
我现在正在使用另一个支持静态路由的路由器。好消息是,我现在可以 ping 所有 IP,无论从哪个网络到哪个网络。不幸的是,我仍然无法打开任何服务。所以我尝试进行一些端口转发以解决这个问题。
场景如下:
192.168.1.2 (iPhone) -> 192.168.1.1 (树莓派WLAN1)——192.168.0.4(RasPiWlan0)-> 192.168.0.2:5901(NAS)
NAS 在端口 5901 和 80 上运行服务。假设我想从 iPhone 访问端口 5901 上的 NAS,对于这种情况,我尝试了以下 iptables 规则,但仍然没有成功:
iptables -A 预路由 -t nat -iWLAN1-p tcp --dport 5901 -j DNAT --to192.168.0.2:5901
iptables -A FORWARD -p tcp -d192.168.0.2--dport5901-j 接受
有什么建议可以解决这个问题吗?
--- 编辑 3 ---
答案1
要使用设备(例如 Raspberry Pi)作为网关,您需要对设备进行“双重归属”,即在两个网络中设置 IP,因此您需要在 192.168.1.* 网络中向 RaspberryPi 添加一个 IP,您可以为此使用 eth0:0 别名。
一旦 Raspberry 可以与 192.168.1.* 网络通信,您就可以在所有 192.168.1.* 网络设备中添加路由(“路由添加”),告诉它们可以通过网关 RaspberryPi 到达 192.168.0.* 网络,反之亦然。
答案2
我假设您在 Pi 上运行 DHCP 服务器,它正在监听wlan1
,并且您使用hostapd
广播作为接入点。
我还假设您已将 Pi 设置为转发数据包。
首先,我对接口使用以下配置。我根本不手动设置路由。
auto wlan0
iface wlan0 inet dhcp
wpa-ssid "ssid"
wpa-psk "psk"
auto wlan1
iface wlan1 inet static
address 10.0.0.1
netmask 255.255.255.0
其次,我使用以下 iptables 规则来做你想做的事情 -
iptables -F
iptables -X
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -i wlan1 -j ACCEPT
iptables -A OUTPUT -o wlan1 -j ACCEPT
iptables -A POSTROUTING -t nat -o wlan0 -j MASQUERADE
iptables -A FORWARD -i wlan1 -j ACCEPT
该脚本应允许连接到 Pi 热点的设备连接到 192.168.0.0/24 网络中的设备。
这是我在家工作一段时间后为使设备连接而采用的设置。
如果您希望 192.168.0.0/24 网络上的设备访问 192.168.1.0/24 网络上的设备,那么最简单的选择是将 Pi 上的端口转发到 Pi 网络上的客户端机器,然后通过使用特定端口访问 Pi 的 IP 地址来访问它们。
或者,您可以在 192.168.0.0/24 网络上的所有客户端机器上设置路由,以通过 Pi 访问 192.168.1.0/24 网络。