Newer
Older
ubuntu_server_scripts / set_static_ip.sh
@ubuntu ubuntu 12 hours ago 2 KB set_static_ip.sh
#!/usr/bin/env bash
# =============================================================================
# set_static_ip.sh — задаёт статический IP на сетевом интерфейсе через netplan
#
# ИСПОЛЬЗОВАНИЕ:
#   sudo bash set_static_ip.sh <IP> [интерфейс] [шлюз] [DNS]
#
# ПРИМЕРЫ:
#   sudo bash set_static_ip.sh 192.168.1.50
#       → IP: 192.168.1.50/24, интерфейс: первый найденный, шлюз: .1
#
#   sudo bash set_static_ip.sh 192.168.1.50 eth0 192.168.1.1 8.8.8.8
#       → все параметры заданы явно
#
# ТРЕБОВАНИЯ: Ubuntu/Debian с netplan, запуск от root (sudo)
# =============================================================================

set -euo pipefail

# --- проверка прав ---
if [[ $EUID -ne 0 ]]; then
  echo "Ошибка: запустите скрипт через sudo" >&2
  exit 1
fi

# --- проверка аргументов ---
if [[ $# -lt 1 ]]; then
  echo "Использование: sudo bash $0 <IP> [интерфейс] [шлюз] [DNS]"
  echo "Пример:        sudo bash $0 192.168.1.50"
  exit 1
fi

DESIRED_IP="$1"

# --- определяем параметры сети ---
# Берём подсеть /24 и вычисляем шлюз (.1) из IP, если не заданы явно
NETWORK_PREFIX=$(echo "$DESIRED_IP" | cut -d. -f1-3)

IFACE=${2:-$(ip -o link show | awk -F': ' '$2 !~ /^lo$/ {print $2; exit}')}
GATEWAY=${3:-"${NETWORK_PREFIX}.1"}
DNS=${4:-"8.8.8.8"}
MASK="/24"

echo "→ Интерфейс : $IFACE"
echo "→ IP        : ${DESIRED_IP}${MASK}"
echo "→ Шлюз      : $GATEWAY"
echo "→ DNS       : $DNS"
echo

# --- путь к конфигу netplan ---
NETPLAN_FILE="/etc/netplan/99-static-ip.yaml"

# --- создаём конфиг ---
cat > "$NETPLAN_FILE" <<EOF
network:
  version: 2
  renderer: networkd
  ethernets:
    ${IFACE}:
      dhcp4: false
      addresses:
        - ${DESIRED_IP}${MASK}
      routes:
        - to: default
          via: ${GATEWAY}
      nameservers:
        addresses:
          - ${DNS}
          - 1.1.1.1
EOF

echo "✓ Конфиг записан в $NETPLAN_FILE"

# --- проверка синтаксиса перед применением ---
echo "Проверяем конфиг (netplan try)..."
netplan generate

# --- применяем ---
netplan apply
echo "✓ Настройки применены. Текущий IP на $IFACE:"
ip -4 addr show "$IFACE" | grep inet