操作场景
配置网络参数,是为了让Linux操作系统可以正常使用云上弹性网络产品能力(VPC、子网、弹性IP)。
配置GRUB2
- 修改GRUB 2配置文件。
grub_config='/etc/default/grub'
[ ! -f "${grub_config}.bak" ] && cp "$grub_config" "${grub_config}.bak"
sed -i 's/^[[:space:]]*GRUB_CMDLINE_LINUX_DEFAULT.*/GRUB_CMDLINE_LINUX_DEFAULT=""/' "$grub_config"
sed -i 's/^[[:space:]]*GRUB_CMDLINE_LINUX.*/GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"/' "$grub_config"
- 将更新后的配置应用到系统中。
Red Hat系列Linux操作系统使用如下命令
find /boot/ -name 'grub.cfg' | while IFS= read -r file; do echo -e "\nUpdating $file:" && grub2-mkconfig -o "$file"; done
Debian系列Linux操作系统使用如下命令
update-grub
网络管理组件配置
注意“network管理组件配置”和“NetworkManager管理组件配置”二者仅需要配置其一。
如果您的Linux操作系统属于AnolisOS 7系列或CentOS Linux 7系列(及更早版本),请您选择“network管理组件配置”;否则,请您选择“NetworkManager管理组件配置”。
网络管理组件配置完成后,请您继续完成通用网络配置。
network管理组件配置
- 移除未使用旧版命名方式的主网卡的配置文件。
# 例:rm -f /etc/sysconfig/network-scripts/ifcfg-enp0s1
rm -f /etc/sysconfig/network-scripts/ifcfg-<未使用旧版命名方式的主网卡的名称>
- 配置主网卡。
cat <<'EOT' >/etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO=dhcp
BROWSER_ONLY=no
DEFROUTE=yes
DEVICE=eth0
DHCPRELEASE=yes
DHCPV6C=yes
IPV4_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_FORCE_ACCEPT_RA=yes
IPV6_PEERDNS=yes
IPV6C=yes
IPV6INIT=yes
NAME=eth0
NM_CONTROLLED=no
ONBOOT=yes
PEERDNS=yes
PERSISTENT_DHCLIENT=yes
PROXY_METHOD=none
STARTMODE=auto
TYPE=Ethernet
USERCTL=no
EOT
systemctl disable NetworkManager
systemctl enable network
- 下载 set_ifcfg_network.sh 文件传入虚机 /usr/local/ctcloud/net/ 目录下,作为 /usr/local/ctcloud/net/set_ifcfg.sh 文件。
mv /usr/local/ctcloud/net/set_ifcfg_network.sh /usr/local/ctcloud/net/set_ifcfg.sh
- 修改 /etc/sysconfig/network 文件。
cat <<'EOT' >/etc/sysconfig/network
IPV6_AUTOCONF=yes
NETWORKING=yes
NETWORKING_IPV6=yes
NOZEROCONF=yes
EOT
NetworkManager 管理组件配置
配置 NetworkManager。
# 多个自定义配置文件可能存在针对相同参数的不同配置值,文件名以 zz 开头是期望推荐配置值最终生效。
# 参考:https://networkmanager.dev/docs/api/latest/NetworkManager.conf.html
nm_custom_config='/etc/NetworkManager/conf.d/zz-ctims.conf'
# 根据是否启用 ifupdown 插件来调整相关自定义配置。
if grep -q 'plugins.*ifupdown' /etc/NetworkManager/NetworkManager.conf; then
ifupdown_config="\n[ifupdown]\nmanaged=true\n"
else
ifupdown_config=""
fi
echo -e "[main]\ndhcp=dhclient\ndns=default\n$ifupdown_config" >"$nm_custom_config"
调整网卡配置
Red Hat系列Linux操作系统使用如下命令
- 移除未使用旧版命名方式的主网卡的配置文件。
# 例:rm -f /etc/sysconfig/network-scripts/ifcfg-enp0s1
rm -f /etc/sysconfig/network-scripts/ifcfg-<未使用旧版命名方式的主网卡的名称>
#
- 配置主网卡。
cat <<'EOT' >/etc/sysconfig/network-scripts/ifcfg-eth0
AUTOCONNECT_PRIORITY=-999
BOOTPROTO=dhcp
BROWSER_ONLY=no
DEFROUTE=yes
DEVICE=eth0
DHCPRELEASE=yes
DHCPV6C=yes
IPV4_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_FORCE_ACCEPT_RA=yes
IPV6_PEERDNS=yes
IPV6C=yes
IPV6INIT=yes
NAME=eth0
NM_CONTROLLED=yes
ONBOOT=yes
PEERDNS=yes
PERSISTENT_DHCLIENT=yes
PROXY_METHOD=none
STARTMODE=auto
TYPE=Ethernet
USERCTL=no
EOT
systemctl enable NetworkManager
# 部分系统可能不存在 network.service,相关提示可忽略。
systemctl disable network
- 下载set_ifcfg_NetworkManager.sh文件传入虚机 /usr/local/ctcloud/net/ 目录下,作为 /usr/local/ctcloud/net/set_ifcfg.sh 文件。
mv /usr/local/ctcloud/net/set_ifcfg_NetworkManager.sh /usr/local/ctcloud/net/set_ifcfg.sh
- 修改 /etc/sysconfig/network 文件。
echo 'NOZEROCONF=yes' >/etc/sysconfig/network
Debian 系列Linux操作系统使用如下命令。
根据系统实际情况,调整网络配置。
netplan_config_dir='/etc/netplan/'
network_interface_config='/etc/network/interfaces'
if [ -d "$netplan_config_dir" ] && [ "$(ls -A $netplan_config_dir)" ]; then
rm -f "${netplan_config_dir}99-ctcloud-net.yaml" "${netplan_config_dir}99-custom-cloudinit.yaml"
# 多个自定义配置文件可能存在针对相同参数的不同配置值,文件名以 zz 开头是期望推荐配置值最终生效。
# 参考:https://manpages.ubuntu.com/manpages/en/man5/netplan.5.html
cat <<'EOT' >"${netplan_config_dir}zz-ctims.yaml"
network:
renderer: NetworkManager
ethernets:
eth0:
addresses: []
dhcp4: true
dhcp6: true
optional: true
dhcp4-overrides:
route-metric: 100
dhcp6-overrides:
route-metric: 100
version: 2
EOT
elif [ -f "$network_interface_config" ]; then
[ ! -f "${network_interface_config}.bak" ] && cp "$network_interface_config" "${network_interface_config}.bak"
cat <<EOT >"$network_interface_config"
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source $network_interface_config.d/*
# The loopback network interface
auto lo
iface lo inet loopback
EOT
systemctl disable networking
else
echo 'ERROR: Failed to decide a network configuration system.'
fi
通用网络配置
- 配置 sysctl 支持IPv6功能,如果没有使用IPv6的需求,可以跳过此步骤。
# 多个自定义配置文件可能存在针对相同参数的不同配置值,文件名以 zz 开头是期望推荐配置值最终生效。
# 参考:https://man7.org/linux/man-pages/man5/sysctl.d.5.html
cat <<'EOT' >/etc/sysctl.d/zz-ctims.conf
net.ipv6.conf.all.accept_ra=1
net.ipv6.conf.all.disable_ipv6=0
net.ipv6.conf.default.accept_ra=1
net.ipv6.conf.default.disable_ipv6=0
net.ipv6.conf.eth0.accept_ra=1
net.ipv6.conf.lo.disable_ipv6=0
EOT
- 添加补充配置网络的文件。
Red Hat系列Linux操作系统需要下载99-gen-net-conf.rules.zip文件(请解压后提取99-gen-net-conf.rules文件)后,传入虚机 /etc/udev/rules.d/ 目录下,作为 /etc/udev/rules.d/99-gen-net-conf.rules 文件。
Debian系列Linux操作系统不需要配置。
- 修改自定义网络脚本目录下的文件权限。
chmod 755 /usr/local/ctcloud/net/*.sh