如何configuration双宿主服务器以便两个网段进行通信?

我们想要添加一个额外的网段(LAN2),并且需要LAN1上的一些机器来访问LAN2上的资源。 LAN2上的某些机器也需要访问LAN1和WAN网段上的资源。 LAN1和LAN2之间的网关称为“SRV-01”,一个双归属的Linux服务器。

我无法从LAN2访问LAN2或从LAN2访问LAN1,也不能从LAN2访问WAN。 我想知道如何使LAN1主机和LAN2一起通话,以及如何允许从LAN2机器访问WAN。

故障排除

我使用ping获得以下回复:

 IP(来源)---> IP(目标):Ping回复
 -------------------------------------------------- -------------------------
 192.168.5.33(LAN1上的客户端)---> 192.168.5.8(SRV-01:eth0):OK
 192.168.5.33(LAN1上的客户端)---> 10.0.2.1(SRV-01:eth1):NO
 192.168.5.33(LAN1上的客户端)---> 10.0.2.2(SRV-02:eth0):NO
 *。*。*。*。*(SRV-01)---> 192.168.5.33(LAN1上的客户端):OK
 *。*。*。*。*(SRV-01) - > 10.0.2.2(SRV-02:eth0):OK
 10.0.2.2(SRV-02)---> 10.0.2.1(SRV-01:eth1):OK
 10.0.2.2(SRV-02) - > 192.168.5.8(SRV-01:eth0):OK
 10.0.2.2(SRV-02)---> 192.168.5.33(LAN1上的客户端):NO

networking拓扑结构

 WAN ---(ISP路由器)--- LAN1 ---(SRV-01)--- LAN2 ---(SRV-02) 

ISP路由器

Internet服务提供商(ISP)路由器提供NAT(两个networking适配器),并充当LAN1的DHCP服务器。 我们没有shell / admin访问这个设备。

  • xxx.xx.xx.xx / xx(eth0,WAN)
  • 192.168.5.4/24(eth1,LAN1)

SRV-01服务器

SRV-01是双宿主Ubuntu Server 14.04(两个networking适配器),它将充当LAN1子网和LAN2子网之间的网关。

  • 192.168.5.8/24(eth0,LAN1)
  • 10.0.2.1/24(eth1,LAN2)

的/ etc /networking/接口

# Loopback auto lo iface lo inet loopback # LAN1 auto eth0 iface eth0 inet static address 192.168.5.8 netmask 255.255.255.0 network 192.168.5.0 broadcast 192.168.5.255 gateway 192.168.5.4 dns-nameservers xxx.xxx.xxx.xxx # LAN2 auto eth1 iface eth1 inet static address 10.0.2.1 netmask 255.255.255.0 network 10.0.2.0 broadcast 10.0.2.255 dns-nameservers xxx.xxx.xxx.xxx 

路由

 〜$ netstat -r
内核IP路由表
目标网关Genmask标志MSS窗口irtt Iface
默认192.168.5.4 0.0.0.0 UG 0 0 0 eth0
 10.0.2.0 * 255.255.255.0 U 0 0 0 eth1
 localnet * 255.255.255.0 U 0 0 0 eth0
 〜$ ip路由显示
默认通过192.168.5.4 dev eth0 
 10.0.2.0/24 dev eth1 proto kernel scope链接src 10.0.2.1 
 192.168.5.0/24 dev eth0 proto内核作用域链接src 192.168.5.8

IP转发

 〜$ sudo sysctl -a |  grep net.ipv4.ip_forward
 net.ipv4.ip_forward = 1
 net.ipv4.ip_forward_use_pmtu = 0

火墙

在服务器“SRV-01”上,Ubuntu“Uncomplicated FireWall”(UFW)被禁用,所有的iptables链都有一个默认策略设置为ACCEPT目标。 请注意,没有单个数据包通往FORWARD表格尚未…

 〜$ sudo ufw状态
状态:不活动
 〜$ sudo iptables -L -v |  grep政策
链INPUT(策略ACCEPT 369包,28278字节)
链FORWARD(策略接受0包,0字节)
链式输出(策略ACCEPT 187包,19740字节)

SRV-02服务器

SRV-02是带有一个networking适配器的Ubuntu Server 14.04。

  • 10.0.2.2/24(eth0,LAN2)

的/ etc /networking/接口

 #环回
汽车
 iface lo inet loopback
 #LAN2
 iface eth0 inet static
    地址10.0.2.2
    networking掩码255.255.255.0
    networking10.0.2.0
    播放10.0.2.255
     dns-nameservers xxx.xxx.xxx.xxx

路由

 〜$ netstat -r:
内核IP路由表
目标网关Genmask标志MSS窗口irtt Iface
默认10.0.2.1 0.0.0.0 UG 0 0 0 eth0
 10.0.2.0 * 255.255.255.0 U 0 0 0 eth0
 〜$ ip路由显示
默认通过10.0.2.1 dev eth0 
 10.0.2.0/24 dev eth0 proto kernel scope链接src 10.0.2.2 

火墙

Ubuntu“Uncomplicated FireWall”(UFW)在服务器“SRV-02”上被禁用,所有的iptables链都有一个默认策略设置为ACCEPT目标。

 〜$ sudo ufw状态
状态:不活动
 〜$ sudo iptables -L -v |  grep政策
链INPUT(策略ACCEPT 0包,0字节)
链FORWARD(策略接受0包,0字节)
链OUTPUT(策略ACCEPT 0包,0字节)

我在这里错过了什么? 我想知道什么静态路由应该被添加到SRV-01,并且如果默认的网关被正确configuration…

这个设置有两个问题:

  1. LAN1上的主机对LAN2段一无所知。 当您从SRV-02 ping LAN1上的主机(我们称之为host1)时,数据包将通过SRV-01路由并到达host1。 但是,host1会将答复发送给它的默认网关(ISP路由器),因为它没有到LAN2的特定路由。 (ISP路由器将a)也将它发送到它的默认网关,因为它也不知道LAN2,或b)丢弃数据包,因为它来自一个未知来源,而不是本地LAN。
  2. 当试图从LAN2到达WAN时,数据包将通过SRV-02路由到ISP路由器,有两种情况是可能的:
    • 路由器不会NAT转换数据包,因为数据包的来源(LAN2)不是本地LAN(这是更可能的情况),或者
    • 路由器将NAT转换数据包并将其发送到Internet。 但是,当答复到达并且目标被转换回LAN2地址时,数据包将不会被传送,因为ISP路由器没有该networking的路由。 数据包将被错误地发送到默认网关(ISP)。

这些问题可以通过将静态路由添加到LAN2到ISP路由器,并在SRV-01上添加LAN2的源NATconfiguration来解决。 但是,这是不可能的,因为没有pipe理员访问ISP路由器。

有两个解决scheme可以解决这个问题:

A.使SRV-01成为LAN1和LAN2主机的完整路由器

  • 将另一个networking适配器添加到SRV-01(使其总数为3)
  • 按如下方式更改拓扑:

 WAN -> ISP router -> LAN1 -> SRV-01 +-> LAN3 (for hosts originally in LAN1) +-> LAN2 -> SRV-02 

基本上,我们正在使SRV-01成为LAN网段的路由器。

  • 这需要将原来在LAN1中的主机移动到一个新的子网LAN3 – 假设我们使用10.0.1.0/24
  • SRV-01的networkingconfiguration将需要更改如下:

的/ etc /networking/接口:

 # LAN1 - to ISP router auto eth0 iface eth0 inet dhcp # we can even use dhcp as the IP address is not really important # - there are no more hosts on LAN1 apart from ISP router and SRV-01 # LAN3 - for hosts originally in LAN1 iface eth1 address 10.0.1.1 netmask 255.255.255.0 # LAN2 iface eth2 address 10.0.2.1 netmask 255.255.255.0 

iptables规则,使广域网接入工作:

 iptables -t nat -A POSTROUTING -o eth0 -s 10.0.1.0/24 -j MASQUERADE iptables -t nat -A POSTROUTING -o eth0 -s 10.0.2.0/24 -j MASQUERADE 

或者,如果您select在eth0上保留SRV-01上的静态IP地址,则可以更改规则(尽pipeMASQUERADE仍然可以使用):

 iptables -t nat -A POSTROUTING -o eth0 -s 10.0.1.0/24 -j SNAT --to-source 192.168.5.8 iptables -t nat -A POSTROUTING -o eth0 -s 10.0.2.0/24 -j SNAT --to-source 192.168.5.8 
  • DHCP将需要在eth1上的SRV-01上configuration(LAN3,对于原来在LAN1上的主机),并且如果需要,也可能在eth2上(LAN2)configuration。 (在这两种情况下,网关将分别是eth1或eth2的本地地址,但不言而喻:)

这将使LAN3和LAN2之间的通信成为可能(通过两者的默认网关SRV-01)。 由于采用双源NAT,WAN接入也可以从LAN3和LAN2两种方式工作。

B.使SRV-01成为LAN1的DHCP服务器

这种方法不像上面那样干净,但是稍微简单一些。 它假定您可以禁用ISP路由器上的DHCP

  • 在ISP路由器上禁用DHCP
  • 在SRV-01上为LAN1设置DHCP,并使SRV-01(192.168.5.8)成为LAN1的默认网关
  • 在SRV-01上为LAN2设置源NAT转换,以便WAN2从LAN2工作:

 iptables -t nat -A POSTROUTING -o eth0 -s 10.0.2.0/24 -d 192.168.5.4 -j SNAT --to-source 192.168.5.8 iptables -t nat -A POSTROUTING -o eth0 -s 10.0.2.0/24 ! -d 192.168.5.0/24 -j SNAT --to-source 192.168.5.8 

第一行启用SNAT,以使LAN2主机可以访问ISP路由器本身,第二行禁用LAN2-LAN1访问的SNAT。

同样,这种方法并不像上面那样干净,因为在同一个子网(SRV-01,ISP路由器)中有两台路由器。 当我自己使用这种方法时,我注意到我的第二个路由器(在这种情况下,SRV-01)会发送ICMPredirect到ISP路由器,因为它会看到客户端(LAN1上的主机)和上游路由器(ISP路由器)同一个LAN。 这可能不是所期望的,因为在SRV-01上实施的networking策略可以被规避。

希望有所帮助。