将插入 Raspberry Pi 以太网的设备连接到 WiFi 网络

Tom*_*Tom 5 networking linux wireless-networking raspberry-pi

我刚刚开始执行一项任务,以了解有关网络的更多信息,并且我已经遵循了教程(https://raspberrypihq.com/how-to-turn-a-raspberry-pi-into-a-wifi-router/)将我的 Raspberry Pi 变成一个 WiFi 路由器。

效果非常好,所以我稍微修改了它,以便我可以使用系留的 iphone 进行互联网连接 - 我只是将所有“eth0”引用切换到“eth1”(iphone 接口),并添加了一个脚本来设置手机时的所有内容已插入。

此设置释放了 Pi 的以太网端口,因此我想尝试更进一步,允许插入其中的设备连接到网络。如果可能的话,我想尝试添加一个开关,这样我就可以连接多个设备。

我尝试摆弄 nat 和 iptables 但没有成功,所以我的问题是,如何将 eth0 上的设备连接到我的 wlan 网络?


编辑:

下面是一些额外的信息。这些是手机插入后的结果。

输出来自iptables -t nat -L

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

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  --  anywhere             anywhere
Run Code Online (Sandbox Code Playgroud)

输出来自netstat -rn

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         172.20.10.1     0.0.0.0         UG        0 0          0 eth1
172.20.10.0     0.0.0.0         255.255.255.240 U         0 0          0 eth1
192.168.10.0    0.0.0.0         255.255.255.0   U         0 0          0 wlan0
Run Code Online (Sandbox Code Playgroud)

编辑2:

以下内容位于我的 dhcpd.conf 文件中:

subnet 192.168.10.0 netmask 255.255.255.0 {
 range 192.168.10.10 192.168.10.200;
 option broadcast-address 192.168.10.255;
 option routers 192.168.10.1;
 default-lease-time 600;
 max-lease-time 7200;
 option domain-name "local-network";
 option domain-name-servers 8.8.8.8, 8.8.4.4;
}
Run Code Online (Sandbox Code Playgroud)

dhcp 配置为在 wlan0 - /etc/default/isc-dhcp-server 上运行:

INTERFACES="wlan0"
Run Code Online (Sandbox Code Playgroud)

Mar*_*iae 3

严格来说,不需要太多其他东西。我假设您已经启用了 IPv4 转发,并且可能还启用了此规则:

  iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
Run Code Online (Sandbox Code Playgroud)

这将允许您对所有连接进行 NAT。那么你的路由表需要

  ip route add default via IP_ADDRESS_OF_YOUR_PHONE
Run Code Online (Sandbox Code Playgroud)

它可能也已经拥有了。然后你就可以走了。

编辑:

现在您已经发布了路由表(但是请不要使用过时的、已弃用的命令,如 *ifconfig、route...,仅使用ip命令,例如,对于路由表ip route show来查看接口的地址ip addr show ,...) 我发现您没有到以太网端口客户端的路由。如果您从中获取 IP 地址端口电缆连接客户端的网络是 192.168.20.0/24,那么您必须添加:

   ip route add 192.168.20.0/24 dev eth1
Run Code Online (Sandbox Code Playgroud)

您不应将同一网络用于无线和有线客户端。

如果您还需要配置dhcpd,请像以前一样编辑相同的文件 /etc/dhcp/dhcpd.conf ,并添加新网络:

  subnet 192.168.10.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
option routers 192.168.10.1;
range 192.168.10.100 192.168.10.200;
}

subnet 192.168.20.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
option routers 192.168.20.1;
range 192.168.20.100 192.168.20.200;
}
Run Code Online (Sandbox Code Playgroud)

在文件 /etc/default/isc-dhcp-server 中,将行INTERFACES="wlan0"更改为

 INTERFACES="wlan0 eth0"
Run Code Online (Sandbox Code Playgroud)

最后为路由器的eth0网卡指定一个合适的地址:

 ip link set dev eth0 down
 ip addr flush dev eth0
 ip addr add 192.168.20.1/24 dev eth0
 ip link set dev eth0 up
Run Code Online (Sandbox Code Playgroud)

重启dhcp,应该就OK了。