我正在尝试以下设置:
Raspberry pi (eth0) <--> (eth0) 笔记本电脑 (wlan0) <--> 互联网
(覆盆子有一个 Raspbian。)。左侧 LAN 使用地址 192.168.0.*。
我目前正在笔记本电脑上运行以下脚本:
ifconfig eth0 up
ifconfig eth0 inet 192.168.0.1
route | grep "192\.168\.0\.0" || \
route add -net 192.168.0.0/16 dev eth0
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F; iptables -t nat -F
iptables -t nat -A POSTROUTING ! -d 192.168.0.0/16 -o wlan0 -j MASQUERADE
killall -9 udhcpd
udhcpd -f
希望 Raspberry 上的(几乎是开箱即用的)Raspbian 能够获取 DHCP 服务器。 (在最终配置中,Raspberry 将处于无头设置)。
然而,这仅有效有时。当从两台机器中的一台 ping 另一台机器时,我也经常得到Packet filtered
答案,或者根本没有答案。 (另外,看起来笔记本电脑有时会删除我添加的路由)。
我忘记了什么?
答案1
你想做的事不会这样。您不能在两个不同的网络接口上有重叠的 IP 范围:正如您所发现的,这有时会传送数据包,有时则不会。并且 DHCP 请求是仅限于单个 LAN 网段的广播,它们不会被转发。
如果 PC 通过 LAN 而不是 WLAN 连接到互联网,则只需桥接两个ethX
接口即可。但是,除非 WLAN 处于 4 地址模式,否则您无法将 WLAN 接口桥接到 LAN,因为普通的 3 地址 WLAN 数据包不携带足够的信息,因此您既可以将 PC 寻址为“中间”接收方,又可以将RaspPi 作为“最终”接收器。
因此,正确的方法是在两个接口上分配不同的 IP 范围,例如 192.168.1.*/24(或路由器为您提供的任何内容) ,以及笔记本电脑上wlan0
的 192.168.3.1/24(或其他内容) 。eth0
然后在笔记本电脑上运行 DHCP 服务器来控制eth0
并为 RaspPi 提供 192.168.55.*/24 地址。最后,启用转发和伪装。
我在我的 PC 上使用以下脚本以及正确的 dhcpd 配置文件:
#!/bin/bash
# pass eth0 through wlan0, using nat
modprobe nf_conntrack
modprobe nf_conntrack_ipv4
modprobe nf_nat
modprobe iptable_nat
EXTIF="wlan0"
INTIF="eth0"
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
iptables -P INPUT ACCEPT
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT
iptables -P FORWARD DROP
iptables -F FORWARD
iptables -t nat -F
iptables -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
iptables -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
ip link set eth0 down
ip addr flush dev eth0
ip addr add 192.168.3.1/24 dev eth0
ip link set eth0 up
/etc/init.d/isc-dhcp-server start
(如果您使用 systemd,请将最后一行替换为 systemd 命令以启动 DHCP 服务器)。