因此,我从运行 Raspbian Stretch Kernel 版本:4.14、wlan0 的 Raspberry pi 3b+ 接入互联网,并且我只需创建一个网络桥接器即可将互联网提供给以太网适配器,当我将新计算机插入它时,它将通过 dhcp 提供 ip 地址。所以我这样做了,并且它工作正常,但是当我尝试从位于 192.168.1.0/24 上的主计算机 ping 到 192.168.2.0/24 网络时,我不能这样做,但是当我尝试从 192.168.2.0/24 网络 ping 到 192.168.1.0/24 时我可以。这是为什么?我希望能够访问 192.168.2.xxx,因为我想在那里托管一个网络服务器。救命...
我尝试过这样的桥接:
sudo apt-get install dnsmasq
sudo nano /etc/dhcpcd.conf:
interface eth0
static ip_address=192.168.2.1/24
static routers=192.168.2.0
sudo nano /etc/network/interfaces:
auto eth0
allow-hotplug eth0
iface eth0 inet static
address 192.168.2.1
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.2.255
auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.1.10
gateway 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
sudo service dhcpcd restart
sudo nano /etc/dnsmasq.conf:
interface=eth0 # Use interface eth0 listen-address=192.168.2.1 # Specify the address to listen on bind-interfaces # Bind to the interface
server=8.8.8.8 # Use Google DNS
domain-needed # Don't forward short names
bogus-priv # Drop the non-routed address spaces.
dhcp-range=192.168.2.10,192.168.2.20,12h # IP range and lease time
sudo nano /etc/sysctl.conf:
net.ipv4.ip_forward=1
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
sudo iptables -A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT`
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
sudo service dnsmasq start
答案1
因此,据我所知,您当前的网络设置是:
- 一个私有网络
192.168.1.0/24
,我们称之为 net1 - A分离的私有网络
192.168.2.0/24
,我们称之为 net2
现在,net1 是不是net2 的子集。它们实际上是两个独立的网络,您需要在它们之间进行路由。
看起来像:
- 您的“主”计算机(我们称之为 pcA)位于 net1 上
- 你的“新”电脑,我们称之为 pcB,位于 net2 上
- 您有一个 Raspberry Pi,它在 net1 和 net2 上都有地址。
- 您让 Pi 充当 net2 的网关,并执行 NAT,以便 net2 上的主机(包括 pcB)可以访问 net1(因此可以通过 net1 访问互联网)。这实际上是典型的家用 NAT 路由器所做的。
- 这可以解释为什么你可以从 net2 访问 net1 主机,但反之则不行。
根据该设置,您有以下几个选择:
您可以将其视为任何其他 NAT 路由器(第 3 层),并执行转发端口。换句话说,您可以将端口从 Pi 的 net1 地址转发到 net2 主机上的特定端口。例如,假设 Pi 的 net1 地址为
192.168.1.10
,而 pcB 的 net2 地址为192.168.2.55
,您可以转发192.168.1.10:80
到192.168.2.55:80
。然后,您可以通过访问 Pi 的端口 80(192.168.1.10:80
)从 net1 主机访问 pcB 上的端口 80。你可以桥(第 2 层)Pi 上的两个接口。这意味着所有内容都在 net1 上,而 net2 不存在。所有内容都在空间中
192.168.1.0/24
,可以自由访问彼此。这意味着您的 Pi 不再充当路由器,您应该放弃 NAT 并禁用 Pi 上的 DHCP 和 DNS 服务。Pi 的 eth0 接口上的所有内容都将通过 net1 的 DHCP 服务器通过桥接连接分配一个 net1 地址。你可以继续拥有两个独立的网络(第 3 层),并继续对外部主机使用 NAT,但要正确路线在您的内部网络之间进行。为此,您有两种选择:
- 目前,您的 net1 主机将全部访问其默认网关,以处理不在同一网络上的任何事物。您可以继续执行此操作,并配置默认网关(可能是您的通用家用路由器)以将任何 net2 目的地转发到 Pi 的 net1 地址。
- 您可以单独为每台 net1 主机配置静态路由,以便 net2 目的地通过 Pi 的 net1 地址到达。这需要更多的配置工作,但速度会更快,因为数据包不必通过 net1 的网关路由。
无论使用哪种方式,您都应该将 Pi 配置为不对具有 net1 目的地的请求应用 NAT;这些请求应该在不进行转换的情况下转发。
端口转发是当前设置下最简单的选项。但我建议使用桥接(如果你实际上没有需要额外的网络,这是最干净的解决方案)或路由(如果您实际上需要额外的网络,例如出于防火墙目的)无需 NAT,因为它们将为您提供对主机的完全访问权限,而无需单独转发每个端口。