这是我的家庭网络,我在这里进行了大量学习。
请参阅文章底部有关 VLAN 和相关区域防火墙规则的详细相关细节,因为它很长
我已成功为 6 台 Windows 服务器中的每一台分配了 2 个 NIC(管理/DMZ),并使用 LAN 中的 Windows 笔记本电脑访问管理后台的内容,以便对交换机/路由器等进行 RDP/Web 访问。我可以从我的 Windows LAN 机器 ping 每台服务器到它们的 DMZ 和管理 IP 并获得返回。
因此,几天前我添加了具有相同配置的 Ubuntu 16 LTS 服务器,但无法从 Windows 笔记本电脑 ping 两个 IP。
这是我的 /etc/network/interfaces 文件
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.67.100
netmask 255.255.255.0
# network 192.168.67.0
# broadcast 192.168.67.255
gateway 192.168.67.253
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 192.168.67.253
dns-search on.fake.network
# Management network interface
auto eth1
iface eth1 inet static
address 192.168.7.100
netmask 255.255.255.0
# network 192.168.7.0
broadcast 192.168.7.255
#persistent static routes
up route add -net 192.168.1.0/24 gw 192.168.7.253 dev eth1
我的 IP 路由表
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.67.253 0.0.0.0 UG 0 0 0 eth0
192.168.1.0 192.168.7.253 255.255.255.0 UG 0 0 0 eth1
192.168.7.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.67.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
因此,使用此配置,我可以 ping 192.168.7.100,但不能 ping 192.168.67.100,我取出持久静态路由及其对立面 :/
我怎样才能获胜?这在 Windows 中相当容易,但在 Ubuntu 中却让我很为难。
* 额外细节 *
Ubiqiti ERL3 路由器创建 VLAN
VLAN 7 - Management (192.168.7.0) - Router interface (GW) IP is 192.168.7.253
VLAN 13 - LAN (192.168.1.0) - Router interface (GW) IP is 192.168.1.253
VLAN 67 - DMZ (192.168.67.0) - Router interface (GW) IP is 192.168.67.253
通过 LAN 连接的 Windows 笔记本电脑
VLAN 13 - LAN (192.168.1.15)
Ubuntu Server(通过 Hyper-V 主机)有 2 个 NIC
eth0 - VLAN 67 - DMZ (192.168.67.100)
eth1 - VLAN 7 - Management (192.168.7.100)
从 LAN 192.168.1.15 向 DMZ/MGMT 192.168.67.100/192.168.7.100 发起 Ping
以下是与此场景相关的精简防火墙规则,删除了 SSH/HTTP 访问等额外内容。
注意“address-group mgmtfromlan”包含来自 LAN 的几个 IP,包括 192.168.1.15(LAN VLAN 中的笔记本电脑)
name lan-dmz {
default-action drop
enable-default-log
rule 1 {
action accept
state {
established enable
related enable
}
}
rule 2 {
action drop
log enable
state {
invalid enable
}
}
rule 100 {
action accept
description "Allow ICMP"
log enable
protocol icmp
}
}
name lan-mgmt {
default-action drop
enable-default-log
rule 1 {
action accept
state {
established enable
related enable
}
}
rule 2 {
action drop
log enable
state {
invalid enable
}
}
rule 100 {
action accept
description "Allow ICMP"
log enable
protocol icmp
source {
group {
address-group mgmtfromlan
}
}
}
}
name dmz-lan {
default-action drop
enable-default-log
rule 1 {
action accept
state {
established enable
related enable
}
}
rule 2 {
action drop
log enable
state {
invalid enable
}
}
}
name mgmt-lan {
default-action drop
enable-default-log
rule 1 {
action accept
state {
established enable
related enable
}
}
rule 2 {
action drop
log enable
state {
invalid enable
}
}
rule 100 {
action accept
description "Allow ICMP"
log enable
protocol icmp
}
}
* Windows 笔记本电脑上的路由表 192.168.1.15 *
===========================================================================
Interface List
15...b8 ca 3a d4 bb bc ......Intel(R) 82579LM Gigabit Network Connection #2
5...3c a9 f4 03 73 ed ......Microsoft Wi-Fi Direct Virtual Adapter #2
19...00 ff d4 0e 47 e9 ......TAP-Windows Adapter V9
7...3c a9 f4 03 73 ec ......Intel(R) Centrino(R) Ultimate-N 6300 AGN #2
1...........................Software Loopback Interface 1
12...00 00 00 00 00 00 00 e0 Microsoft Teredo Tunneling Adapter
===========================================================================
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.1.253 192.168.1.15 291
127.0.0.0 255.0.0.0 On-link 127.0.0.1 331
127.0.0.1 255.255.255.255 On-link 127.0.0.1 331
127.255.255.255 255.255.255.255 On-link 127.0.0.1 331
192.168.1.0 255.255.255.0 On-link 192.168.1.15 291
192.168.1.15 255.255.255.255 On-link 192.168.1.15 291
192.168.1.255 255.255.255.255 On-link 192.168.1.15 291
224.0.0.0 240.0.0.0 On-link 127.0.0.1 331
224.0.0.0 240.0.0.0 On-link 192.168.1.15 291
255.255.255.255 255.255.255.255 On-link 127.0.0.1 331
255.255.255.255 255.255.255.255 On-link 192.168.1.15 291
===========================================================================
Persistent Routes:
Network Address Netmask Gateway Address Metric
0.0.0.0 0.0.0.0 192.168.1.253 Default
0.0.0.0 0.0.0.0 192.168.1.253 Default
===========================================================================
IPv6 Route Table
===========================================================================
Active Routes:
If Metric Network Destination Gateway
1 331 ::1/128 On-link
1 331 ff00::/8 On-link
===========================================================================
Persistent Routes:
None
提前致谢
答案1
设置默认路由后,ubuntu VM 在 eth1 上收到一个数据包(来自 192.168.1.15:ping 192.168.7.100)。它将执行以下操作之一:
- 由于反向路径过滤而丢弃数据包:在没有到该数据包源的路由的接口上接收数据包。
- 通过 eth0 应答,因为 192.168.1.15 与 eth0 上通过 192.168.1.253 的默认路由匹配
行为取决于/proc/sys/net/ipv4/conf/{all,eth1}/rp_filter
值,但默认为 drop:all/rp_filter = 1 和 eth1/rp_filter = 1
在未丢弃的情况下:路由器 ERL3 看到来自 192.168.1.7.100 的回复数据包,该数据包应位于 lan-mgmt 中,但从 lan-dmz 传输。根据您写的路由器配置中可能描述的设置,但我不知道:
- 会将其丢弃,原因大致与 ubuntu 在启用 rp_filter 时将其丢弃的原因相同:它的路由在其他地方
- 无论如何都会接受。
假设 ERL3 接受它。那么“修复”就很简单了:通过禁用反向路径过滤来降低 ubuntu 的安全性:
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
參考文獻:https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt(rp_过滤器)
(其工作方式是,eth0 保持受保护,但这与此无关)
先试一下,如果有效,问题就解决了。考虑将两者替换echo 0
为echo 2
仅用于 eth1(松散模式)。但请考虑这仍然是一个问题:非对称路由可能会产生其他问题,尤其是在防火墙方面。
如果路由器 ERL3 也在过滤(即:上述方法不起作用):ubuntu 必须知道 192.168.1.0/24 的存在,并且使用table
和rule
设置正确的路由。除了如何解释之外,解释所有为什么有点困难,这里有一个参考,虽然不完全适用于这种情况,但可以主要基于(我在这里做了):
參考文獻:http://lartc.org/howto/lartc.rpdb.multiple-links.html
我选择任意表 7 和 67 来匹配 192.168.7.0/24 和 192.168.67.0/24。从空路由开始(除了自动创建的本地 lan 路由之外),然后:
ip route add 192.168.67.0/24 dev eth0 src 192.168.67.100 table 67
ip route add default via 192.168.67.253 table 67
ip route add 192.168.7.0/24 dev eth1 src 192.168.7.100 table 7
ip route add 192.168.1.0/24 via 192.168.7.253 table 7 #enable only LAN to have a route to access MGMT. Feel free to replace 192.168.1.0/24 with default, you have a firewall too.
我不知道这是否真的有必要,但文档中是这么说的……:
ip route add 192.168.7.0/24 dev eth1 src 192.168.7.100
ip route add 192.168.67.0/24 dev eth0 src 192.168.67.100
您的默认路线保持不变,这里再次采用ip route
的语法:
ip route add default via 192.168.67.253
真正重要的部分是告诉使用正确的界面:
ip rule add from 192.168.67.100 table 67
ip rule add from 192.168.7.100 table 7
最后注意:确保 ubuntu 没有路由,否则被攻陷的 DMZ 主机可能会尝试通过 ubuntu 管理其他主机:
echo 0 > /proc/sys/net/ipv4/conf/default/forwarding
echo 0 > /proc/sys/net/ipv4/conf/all/forwarding
答案2
您的静态路由覆盖了默认网关。
当路由存在时,所有到 192.168.1.x 的流量都通过 eth1 离开,并使用 192.168.7.253 作为网关。
当路由不存在时,所有到 192.168.1.x 的流量都通过 eth0 离开,并使用 192.168.67.253 作为网关。
从您的 PC 到服务器的路径没有问题,但返回路径会采用不同的路由,具体取决于您 ping 的接口。这称为非对称路由,通常不被安全设备允许。它可能被防火墙阻止了。本质上,通过不同路由的返回流量是“不相关的”和无法识别的流量,因此会被丢弃。
我认为解决这个问题最简单的方法是确保流量根据接收数据的接口采用正确的路由返回。这可以通过在两个接口上设置默认网关来实现。
不幸的是,这并不像听起来那么简单。您需要创建备用路由表和路由规则。
看看这些文章是否有帮助:https://www.thomas-krenn.com/en/wiki/Two_Default_Gateways_on_One_System
https://askubuntu.com/questions/310355/networking-with-multiple-nics