Ubuntu Server 15.04 作为具有多个子网的路由器和 DHCP 服务器

Ubuntu Server 15.04 作为具有多个子网的路由器和 DHCP 服务器

在我的公司,我被指派构建一个新网络,其中 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

您的配置存在几个问题:

  1. 您使用的是单个网络接口。这不会在公共子网和私有子网之间提供任何隔离,并且可能会导致其他问题。如果可能的话,您确实应该添加第二个网络接口。
  2. 您想使用多个子网,但本地网络接口上没有这些子网的 gw IP 地址。例如,在具有10.0.7.0网络掩码的子网的 DHCP 配置中,255.255.255.0您指定了 router 10.0.1.1。这在子网之外,意味着该子网上的客户端将无法访问路由器。您应该在本地接口上为每个子网添加一个单独的路由器 IP - 例如,在/etc/network/interfaces 部分中10.0.7.1: 。up ip addr add 10.0.7.1/24 dev eth0iface eth0
  3. 您在操作中添加的路由up将不再需要 - 路由器已经知道如何到达它们,因为它有路由器 IP。
  4. 您是否启用了 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

希望有所帮助。

相关内容