Iptables

Ubuntu Server 15.04 作為具有多個子網的路由器和 DHCP 伺服器

  • September 18, 2015

在我的公司,我被分配建立一個新網路,其中 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

我的問題是客戶端無法在子網之間進行通信,也無法與外部連接。我經歷了很多howtos,閱讀了其他人的問題,這些問題得到了解決方案,並在上週嘗試了很多。從 10.0.8.X 子網中的 Windows 機器,我可以 ping 每個客戶端到調製解調器 10.0.0.1,但沒有連接到網際網路。在 Ubuntu 機器上,我只能在同一個子網中 ping。但是現在我處於一個我不知道更多資訊並且需要幫助來完成這個項目的地步。我希望有人能夠為我指出正確的方向,以使整個網路正常工作。

您的配置有幾個問題:

  1. 您正在使用單個網路介面。這不會在公共子網和私有子網之間提供任何隔離,並可能導致其他問題。如果可能的話,你真的應該添加第二個網路介面。
  2. 您想使用多個子網,但在本地網路介面上沒有這些子網的 gw IP 地址。例如,在10.0.7.0帶有網路遮罩的子網的 DHCP 配置中,255.255.255.0您指定了 router 10.0.1.1。這在子網之外,意味著該子網上的客戶端將無法訪問路由器。您應該為本地介面上的每個子網添加一個單獨的路由器 IP - 例如10.0.7.1up ip addr add 10.0.7.1/24 dev eth0iface eth0/etc/network/interfaces 部分。
  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

希望有幫助。

引用自:https://serverfault.com/questions/721922