我想了解 MAAS 的两种网络配置之间的差异。我的理解是,它们都实现了相同的任务,第一个网络连接到互联网,第二个网络由 MAAS 管理。然后配置第二个网络以通过公共网络接口转发流量。
尽管取得了相同的结果,但配置看起来却相当不同,这就是我感到困惑的地方。
首次配置
第一个建议的配置来自以下内容Cloudbase 解决方案 Wiki 页面他们提出了一种简单的/etc/network/interfaces
方法,eth0
连接到外部网络并eth1
进入内部网络并获得一个静态地址:
# The primary network interface (external)
auto eth0
iface eth0 inet dhcp
# The secondary NIC (used internal for MAAS)
auto eth1
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0
然后将相应的iptables
规则保存在 中。据我所知,这与和/etc/rc.local
之间的网络流量转发有关。eth1
eth0
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
/sbin/iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
第二种配置
第二种配置来自Ubuntu Openstack 多安装程序指南。它们的/etc/network/interfaces
文件具有更多的网络接口,但与以前的配置类似,eth0
连接到外部网络并且eth1
是内部的:
# The loopback network interface
auto lo
iface lo inet loopback
dns-nameservers 127.0.0.1
pre-up iptables-restore < /etc/network/iptables.rules
auto eth0
iface eth0 inet dhcp
auto eth1
iface eth1 inet manual
auto br0
iface br0 inet static
address 172.16.0.1
netmask 255.255.255.0
bridge_ports eth1
此时我脑海中浮现的问题是,为什么要有lo
DNS 名称服务器并iptables
应用于它?为什么在这种情况下使用桥接连接?
它们的iptable
规则看起来也不同,并且被放置/etc/network/iptables.rules
并假设这能够转发流量:
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 172.16.0.1/24 ! -d 172.16.0.1/24 -j MASQUERADE
COMMIT
概括
有人可以帮忙解释一下他们做了什么不同的事情以及为什么吗?
如果这个问题太大,请告诉我,我可以将其分解为单独的问题,但首先我认为这提供了更多的背景信息。
答案1
两种配置非常相似,但有一些细微差别。
iface lo inet loopback
dns-nameservers 127.0.0.1
pre-up iptables-restore < /etc/network/iptables.rules
此配置将保证即使您的 eth0 电缆在启动时关闭,您仍将拥有 DNS 解析器和防火墙规则设置(很难摆脱环回网络设备,对吧?)。当然,此示例假定您将在本地运行 DNS 解析器服务。
我认为设置桥接设备没有任何问题。此配置应该可以正常工作,但我认为您不需要它,除非您计划使用它(例如 KVM 虚拟机)。
在第一种情况下,iptables 规则是为 shell 脚本编写的,因此它们的语法看起来与应该与 iptables-restore 一起使用的 /etc/network/iptables.rules 不同。
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 172.16.0.1/24 ! -d 172.16.0.1/24 -j MASQUERADE
COMMIT
这里只有一条规则,它允许伪装 172.16.0.0/24 子网。
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
/sbin/iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
上述规则允许任何来自 eth1 到 eth0 的子网将被伪装并涉及一些过滤。
就我个人而言,我宁愿采用上述混合配置。
答案2
第一个网络配置非常清楚。/etc/network/interfaces 文件大家都很熟悉,当然使用 MAAS 时需要通过 iptables 进行 IP 转发,以便为受 MAAS 管理的节点提供互联网。
除了 DNS 部分和 br0 部分之外的第二个配置是可以理解的。DNS 部分实际上是让 MAAS 服务器意识到它本身正在托管 DNS 服务。该行可能会转移到包含其他 DNS 配置的 /etc/resolve.conf。如果没有创建此 DNS 条目,您将在 JUJU 引导期间遇到此错误:https://github.com/Ubuntu-Solutions-Engineering/openstack-installer/issues/901
但是,我不太确定网桥 br0。这个网络配置真的有效吗?