使用 dnsmasq 在 ubuntu 中实现多子网

使用 dnsmasq 在 ubuntu 中实现多子网

我有一个安装有 ubuntu 服务器 11.10 的多 LAN 端口盒。

我在文件中设置网络/etc/network/interfaces如下:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
       address 192.168.128.254
       netmask 255.255.255.0
       network 192.168.128.0
       broadcast 192.168.128.255
       gateway 192.168.128.1
       dns-nameservers xxxxxx

auto eth1
iface eth1 inet static
       address 192.168.11.1
       netmask 255.255.255.0
       network 192.168.11.0
       broadcast 192.168.11.255

auto eth2
iface eth2 inet static
       address 192.168.21.1
       netmask 255.255.255.0
       network 192.168.21.0
       broadcast 192.168.21.255

auto eth3
iface eth3 inet static
       address 192.168.31.1
       netmask 255.255.255.0
       network 192.168.31.0
       broadcast 192.168.31.255

echo 1 > /proc/sys/net/ipv4/if_forward我也在中启用了 IP 转发rc.local

我的 dnsmasq 配置如下

except-interface=eth0
dhcp-range=interface:eth1,set:wifi,192.168.11.101,192.168.11.200,255.255.255.0
dhcp-range=interface:eth2,set:kids,192.168.21.101,192.168.21.200,255.255.255.0
dhcp-range=interface:eth3,set:game,192.168.31.101,192.168.31.200,255.255.255.0

dhcp 在 eth1、eth2、eth3 上运行良好,任何插入子网的机器都可以获取正确的子网 ip。

我的问题是,每个子网中的机器无法互相 ping 通。例如。

192.168.11.101 无法 ping 192.168.21.101,但可以 ping 192.168.128.1

192.168.31.101 无法 ping 192.168.21.101,但可以 ping 192.168.128.1

我也尝试使用以下命令:

route add -net 192.168.11.0 netmask 255.255.255.0 gw 192.168.11.1 (以及 192.168.21.0/192.168.31.0)在此多 LAN 端口机器上。

但仍然不起作用。

有人可以帮忙吗?谢谢。

答案1

-----------下一个答案------------

也可能是您为每个接口错误地配置了网关。请按如下方式配置接口:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
 address 192.168.128.254
 netmask 255.255.0.0
 gateway 192.168.1.1
 network 192.168.128.0
 broadcast 192.168.128.255
 dns-nameservers xxxxxx

auto eth1
iface eth1 inet static
 address 192.168.11.1
 netmask 255.255.0.0
 network 192.168.11.0
 broadcast 192.168.11.255

auto eth2
iface eth2 inet static
 address 192.168.21.1
 netmask 255.255.0.0
 network 192.168.21.0
 broadcast 192.168.21.255

auto eth3
iface eth3 inet static
 address 192.168.31.1
 netmask 255.255.0.0
 network 192.168.31.0
 broadcast 192.168.31.255

经过这些更改后,所有接口都应指向同一网关并正常通信。您可能需要删除一些已执行的路由。

答案2

您尝试执行的操作称为“多宿主”,具有多个链接和多个地址空间。您面临的问题是,不同接口之间没有配置和启用路由/网络。

为了使流量在接口之间来回传输,它们需要通过内部接口连接。如果我没记错的话,然后您就可以对外部地址进行 NAT。但是,我认为您要做的要么是需要虚拟化另一个接口来关联内部地址。

本质上,您可能对您所描述的设备要求太高了。

在这种情况下,我会配置一个存在 eth1、eth2、eth3 的内部网络,以将流量传递到 NAT 的 eth0。

实际上,写完这个回复后,为了组织方便,我还有另一个答案要回复。

答案3

你好,我有一个场景,我使用 3 张局域网卡,它们可以 ping 通,我只会贴出我如何配置,看看这对你是否有用,因为我认为你需要启用数据包转发 /etc/sysctl.conf,可能你还需要使用 iptables 来路由数据包。如果防火墙已启用,请禁用它以进行检查。我知道你已经以几乎类似的方式进行了配置,仍然可以尝试一下,因为我可以使用以下配置进行 ping

在 /etc/网络/接口:

-- 环回网络接口

自动 lo iface lo inet 环回

-- 主要网络接口

自动 eth0 iface eth0 inet 静态地址 192.168.1.15 网络掩码 255.255.255.0 网关 192.168.1.1

--辅助网络接口

自动 eth1 iface eth1 inet 静态地址 10.0.0.15 网络掩码 255.0.0.0

自动 wlan0 iface wlan0 inet 静态地址 10.0.1.15

网络掩码 255.255.255.0

提供静态 IP,但只需提及相应的正确网关

pc-1 ip地址 - 10.0.0.21 子网掩码 - 255.0.0.0 网关 - 10.0.0.15 dns - 10.0.0.15 dns - 192.168.1.15


pc-2 ip地址 - 10.0.1.21 子网掩码 - 255.255.255.0 网关 - 10.0.1.15 dns - 10.0.1.15 dns - 192.168.1.15


我已启用 IPv4 和 IPv6 的数据包转发(/etc/sysctl.conf)

Net.ipv4.ip_forward = 1

Net.ipv6.conf.all.转发 = 1


这应该可行,否则你还必须使用 iptables 并为每个你需要的接口指定路由,希望这可行

我不擅长使用 iptables,我在网上找到了这个,并在下面提到了同样的内容

如果您需要使用 iptable,请尝试更改以下接口,因为您需要为所有接口编写行,如下所示是仅 1 个接口的示例,因为只有 1 个接口。在这种情况下,我认为 eth0 能够 ping 到 eth1,反之亦然,您也需要为 eth1 提及相同的行

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

相关内容