如何让通过以太网线连接到 PC 的 Raspberry pi 上的互联网正常工作?

如何让通过以太网线连接到 PC 的 Raspberry pi 上的互联网正常工作?

我正在尝试以下设置:

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 服务器)。

相关内容