![Ubuntu Server 15.04 作为具有多个子网的路由器和 DHCP 服务器](https://linux22.com/image/666718/Ubuntu%20Server%2015.04%20%E4%BD%9C%E4%B8%BA%E5%85%B7%E6%9C%89%E5%A4%9A%E4%B8%AA%E5%AD%90%E7%BD%91%E7%9A%84%E8%B7%AF%E7%94%B1%E5%99%A8%E5%92%8C%20DHCP%20%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
在我的公司,我被指派构建一个新网络,其中 1 个 ubuntu 服务器管理 3 个子网的 DHCP,允许这些子网相互通信,并共享与子网的公共连接。所有这些只需通过 1 个网卡即可完成。DHCP 配置为通过 eth0 连接,而与公共的连接则通过虚拟接口 eth0:1 进行管理。
/etc/network/interfaces 的配置如下所示:
#The local network interface
auto eth0
iface eth0 inet static
address 10.0.1.1
netmask 255.255.240.0
#The public virtual network interface
auto eth0:1
iface eth0:1 inet static
address 10.0.0.3
netmask 255.255.255.0
gateway 10.0.0.1
dns-nameservers 10.0.0.1
##IP-routing table
# modem + sonicwall
up route add -net 10.0.0.0/24 gw 10.0.0.1 dev eth0:1
up route add -net 10.0.0.0/24 dev eth0:1
# servers
up route add -net 10.0.1.0/24 gw 10.0.1.1 dev eth0
up route add -net 10.0.1.0/24 dev eth0
# printers
up route add -net 10.0.7.0/24 gw 10.0.1.1 dev eth0
up route add -net 10.0.7.0/24 dev eth0
# workstations
up route add -net 10.0.8.0/21 gw 10.0.1.1 dev eth0
up route add -net 10.0.8.0/21 dev eth0
/etc/dhcp/dhcpd.conf:
# Global Configuration
authoritative;
option domain-name-servers 10.0.0.1;
option routers 10.0.0.1;
# ----------------------------------------------------------
# Subnetting
# ----------------------------------------------------------
# Servers
shared-network wonder {
subnet 10.0.1.0 netmask 255.255.255.0 {
range 10.0.1.1 10.0.1.255;
option domain-name "servers.wonder.land.com";
option subnet-mask 255.255.255.0;
option broadcast-address 10.0.1.255;
option routers 10.0.1.1;
default-lease-time 86400;
max-lease-time 86400;
host FILESERVER {
hardware ethernet XX:XX:XX:XX:XX:XX;
fixed-address 10.0.1.2;
option host-name "FILESERVER";
}
host MAILSERVER {
hardware ethernet XX:XX:XX:XX:XX:XX;
fixed-address 10.0.1.3;
option host-name "MAILSERVER";
}
}
# Printers
subnet 10.0.7.0 netmask 255.255.255.0 {
range 10.0.7.1 10.0.7.255;
option domain-name "printers.wonder.land.com";
option subnet-mask 255.255.255.0;
option broadcast-address 10.0.7.255;
option routers 10.0.1.1;
default-lease-time 86400;
max-lease-time 86400;
host HP9500 {
hardware ethernet XX:XX:XX:XX:XX:XX;
fixed-address 10.0.7.1;
option host-name "HP5900";
}
}
# Workstations
subnet 10.0.8.0 netmask 255.255.248.0 {
range 10.0.8.1 10.0.15.255;
option domain-name "workstations.wonder.land.com";
option subnet-mask 255.255.248.0;
option broadcast-address 10.0.8.255;
option routers 10.0.1.1;
default-lease-time 86400;
max-lease-time 86400;
filename "pxelinux.0";
# XXX
host WSXXX001 {
hardware ethernet XX:XX:XX:XX:XX:XX;
fixed-address 10.0.8.1;
option host-name "WSXXX001";
}
host WSXXX002 {
hardware ethernet XX:XX:XX:XX:XX:XX;
fixed-address 10.0.8.2;
option host-name "WSXXX002";
}
host WSXXX003 {
hardware ethernet XX:XX:XX:XX:XX:XX;
fixed-address 10.0.8.3;
option host-name "WSXXX003";
}
# YYY
host WSYYY001 {
hardware ethernet XX:XX:XX:XX:XX:XX;
fixed-address 10.0.8.4;
option host-name "WSYYY001";
}
}
}
最后但同样重要的是 iptables /etc/rc.local
#Connection between Subnets
iptables -I FORWARD -i eth0 -o eth0 -s 10.0.0.0/24 -j ACCEPT
iptables -I FORWARD -i eth0 -o eth0 -d 10.0.0.0/24 -j ACCEPT
iptables -I FORWARD -i eth0 -o eth0 -s 10.0.1.0/24 -j ACCEPT
iptables -I FORWARD -i eth0 -o eth0 -d 10.0.1.0/24 -j ACCEPT
iptables -I FORWARD -i eth0 -o eth0 -s 10.0.7.0/24 -j ACCEPT
iptables -I FORWARD -i eth0 -o eth0 -d 10.0.7.0/24 -j ACCEPT
iptables -I FORWARD -i eth0 -o eth0 -s 10.0.8.0/21 -j ACCEPT
iptables -I FORWARD -i eth0 -o eth0 -d 10.0.8.0/21 -j ACCEPT
#Connection from local to public
iptables -A FORWARD -i eth0 -o eth0:1 -j ACCEPT
#Allow established connections
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW ! -i eth0:1 -j ACCEPT
iptables -A FORWARD -i eth0:1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
#Block not established connections from public to local
iptables -A FORWARD -i eth0:1 -o eth0 -j REJECT
#Masquerade local network
iptables -t nat -A POSTROUTING -o eth0:1 -j MASQUERADE
我的问题是客户端无法在子网之间通信,也无法连接到外部。我查阅了很多指南,阅读了其他人的问题,这些问题都得到了解决方案,上周我尝试了很多次。从 10.0.8.X 子网中的 Windows 机器,我可以 ping 到调制解调器 10.0.0.1 的每个客户端,但没有连接到互联网。在 Ubuntu 机器上,我只能在同一个子网中 ping。但现在我处于一个我不知道更多情况的地步,需要帮助来完成这个项目。我希望有人能给我指明正确的方向,让整个网络正常工作。
答案1
您的配置存在几个问题:
- 您使用的是单个网络接口。这不会在公共子网和私有子网之间提供任何隔离,并且可能会导致其他问题。如果可能的话,您确实应该添加第二个网络接口。
- 您想使用多个子网,但本地网络接口上没有这些子网的 gw IP 地址。例如,在具有
10.0.7.0
网络掩码的子网的 DHCP 配置中,255.255.255.0
您指定了 router10.0.1.1
。这在子网之外,意味着该子网上的客户端将无法访问路由器。您应该在本地接口上为每个子网添加一个单独的路由器 IP - 例如,在/etc/network/interfaces 部分中10.0.7.1
: 。up ip addr add 10.0.7.1/24 dev eth0
iface eth0
- 您在操作中添加的路由
up
将不再需要 - 路由器已经知道如何到达它们,因为它有路由器 IP。 - 您是否启用了 IP 转发?检查 的输出
cat /proc/sys/net/ipv4/ip_forwarding
- 它应该显示1
。如果没有,请在 /etc/sysctl.conf 中执行echo "1" > /proc/sys/net/ipv4/ip_forwarding
并设置net.ipv4.ip_forward=1
希望有所帮助。