为静态 IP 地址编写 Netplan 脚本

为静态 IP 地址编写 Netplan 脚本

我已经在论坛上发过帖子,但我想在这里也问一下。所以,我对 Ubuntu Server 18.04、netplan 和 .yaml 还不熟悉。过去使用 Ubuntu Server 16.04,我能够创建一个相当不错的 shell 脚本,在安装后设置在服务器上设置静态 IP。既然 Ubuntu Server 18.04 现在正在使用 netplan,那么是否无法编写网络配置脚本?我试图调整我的 shell 脚本来配置 .yaml 文件的写入,但似乎格式化在编辑 .yaml 文件时至关重要,而我运气不佳。似乎 Ansible 可能是解决这个问题的方法,可能吗?但我还没有掌握 Ansible。还有其他人写过脚本来使用 netplan 配置静态 IP 并更新 .yaml 文件吗?

答案1

@TygerTy 谢谢你。几周前我忘了发一篇后续文章。以下是我想到的对我有用的方法:

#!/bin/bash
#
# Creates a backup
cp /etc/netplan/01-netcfg.yaml /etc/netplan/01-netcfg.yaml.bk_`date +%Y%m%d%H%M`
# Changes dhcp from 'yes' to 'no'
sed -i "s/dhcp4: yes/dhcp4: no/g" /etc/netplan/01-netcfg.yaml
# Retrieves the NIC information
nic=`ifconfig | awk 'NR==1{print $1}'`
# Ask for input on network configuration
read -p "Enter the static IP of the server in CIDR notation: " staticip 
read -p "Enter the IP of your gateway: " gatewayip
read -p "Enter the IP of preferred nameservers (seperated by a coma if more than one): " nameserversip
echo
cat > /etc/netplan/01-netcfg.yaml <<EOF
network:
  version: 2
  renderer: networkd
  ethernets:
    $nic
      addresses:
        - $staticip
      gateway4: $gatewayip
      nameservers:
          addresses: [$nameserversip]
EOF
sudo netplan apply
echo "==========================="
echo

答案2

这对我有用,尽管我正在从当前配置生成静态(不要问为什么)。

只需将 IP 地址替换为您的静态 IP 和网络掩码,而不必像我一样动态地查找它。

您也可以更改网络管理器。

创建静态连接
------ END_CONFIG=/etc/netplan/01-network-card.yaml
generateAndApply() { sudo netplan generate sudo netplan apply }
getInternetInfo() { local INTERNET_INFO=$( ip r | grep default ) printf "%s" "$( echo $INTERNET_INFO | cut -f$1 -d' ' )" }
#static information NAMESERVERS=("1.1.1.1" "1.0.0.1") NETWORK_MANAGER="NetworkManager"
# information that varies IP="$( ip r | grep kernel | cut -f9 -d' ' )" GATEWAY="$( getInternetInfo 3 )" DEVICE_NAME="$( getInternetInfo 5 )" METHOD="$( getInternetInfo 7 )" PREFIX="$( ip r | grep kernel | cut -f1 -d' ' | cut -f2 -d'/' )"
createStaticYAML() { local YAML="network:\n" YAML+=" version: 2\n" YAML+=" renderer: $NETWORK_MANAGER\n" YAML+=" ethernets:\n" YAML+=" $DEVICE_NAME:\n" YAML+=" dhcp4: no\n" YAML+=" addresses: [$IP/$PREFIX]\n" YAML+=" gateway4: $GATEWAY\n" YAML+=" nameservers:\n" YAML+=" addresses: [${NAMESERVERS[0]},${NAMESERVERS[1]}]" printf "%s" "$YAML" }
clearConfigs() { [ -f $END_CONFIG ] && sudo rm $END_CONFIG }
setYAML() { sudo echo -e "$(createStaticYAML)" > $END_CONFIG }
clearConfigs setYAML generateAndApply restartNetwork

相关内容