ISP 路由器

ISP 路由器

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

我无法从 LAN1 访问 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):确定
192.168.5.33(LAN1 上的客户端)---> 10.0.2.1(SRV-01:eth1):否
192.168.5.33(LAN1 上的客户端)---> 10.0.2.2(SRV-02:eth0):否
*.*.*.*.* (SRV-01) ---> 192.168.5.33 (LAN1 上的客户端) :确定
*.*.*.*.* (SRV-01) ---> 10.0.2.2 (SRV-02:eth0) :好的
10.0.2.2 (SRV-02) ---> 10.0.2.1 (SRV-01:eth1) :确定
10.0.2.2 (SRV-02) ---> 192.168.5.8 (SRV-01:eth0) :好的
10.0.2.2 (SRV-02) ---> 192.168.5.33 (LAN1 上的客户端) :否

网络拓扑结构

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

ISP 路由器

互联网服务提供商 (ISP) 路由器提供 NAT(两个网络适配器)并充当 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(两个网络适配器),它将充当 LAN1 子网和 LAN2 子网之间的网关。

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

/etc/网络/接口

# 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
本地网络 * 255.255.255.0 U 0 0 0 eth0
~$ ip 路由显示
默认通过 192.168.5.4 dev eth0
10.0.2.0/24 dev eth1 proto 内核范围链接 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

防火墙

Ubuntu“简单防火墙”(UFW) 在服务器“SRV-01”上被禁用,并且所有 iptables 链都已将默认策略设置为 ACCEPT 目标。请注意,尚未有任何数据包进入 FORWARD 表...

~$ sudo ufw 状态
状态:不活跃
~$ sudo iptables -L -v | grep 策略
链输入(策略接受 369 个数据包,28278 字节)
链转发(策略接受 0 个数据包,0 字节)
链输出(策略接受 187 个数据包,19740 字节)

SRV-02 服务器

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

  • 10.0.2.2/24(eth0,LAN2)

/etc/网络/接口

# 回送
自动档
iface lo inet 环回
# LAN2
iface eth0 inet 静态
    地址 10.0.2.2
    网络掩码 255.255.255.0
    网络 10.0.2.0
    广播 10.0.2.255
    dns 名称服务器 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 内核范围链接 src 10.0.2.2

防火墙

Ubuntu“简单防火墙”(UFW)在服务器“SRV-02”上被禁用,并且所有 iptables 链都将默认策略设置为接受目标。

~$ sudo ufw 状态
状态:不活跃
~$ sudo iptables -L -v | grep 策略
链输入(策略接受 0 个数据包,0 字节)
链转发(策略接受 0 个数据包,0 字节)
链输出(策略接受 0 个数据包,0 字节)

我这里遗漏了什么?我想知道应该向 SRV-01 添加什么静态路由,以及默认网关是否配置正确...

答案1

这种设置有两个问题:

  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 路由器没有该网络的路由。数据包将被错误地发送到默认网关 (ISP)。

可以通过将 LAN2 静态路由添加到 ISP 路由器并在 SRV-01 上为 LAN2 添加源 NAT 配置来解决这些问题。但是,由于没有 ISP 路由器的管理员访问权限,因此无法做到这一点。

有两种解决方案可以解决这个问题:

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

  • 为 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 的网络配置需要进行如下更改:

在 /etc/网络/接口:

# 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

使 WAN 访问正常工作的 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

或者,如果您选择保留 eth0 上 SRV-01 的静态 IP 地址,则可以更改规则(尽管MASQUERADE仍然有效):

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
  • 需要在 SRV-01 的 eth1(LAN3,对于最初位于 LAN1 上的主机)上配置 DHCP,如果需要,还可能需要在 eth2(LAN2)上配置。(在这两种情况下,网关分别将是 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 转换,以便从 LAN2 进行 WAN 访问:

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)会向 ISP 路由器发送 ICMP 重定向,因为它会发现客户端(LAN1 上的主机)和上游路由器(ISP 路由器)位于同一 LAN 上。这可能不是理想的情况,因为可以规避在 SRV-01 上实施的网络策略。

希望有所帮助。

相关内容