net/example.sh

161 lines
5 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Скрипт настройки BR-RTR (Linux): имя хоста, интерфейсы, NAT, маршрутизация
# Интерфейсы:
# enp0s3 - в сторону ISP (статический адрес, шлюз, DNS)
# enp0s8 - в сторону BR-FW (локальная сеть)
# Проверяем, запущен ли скрипт от root
if [[ $EUID -ne 0 ]]; then
echo "Этот скрипт должен быть запущен с правами root"
exit 1
fi
echo "=== Настройка BR-RTR ==="
# 1. Установка имени хоста
read -p "Введите имя хоста (например: br-rtr.au-team.irpo): " hostname
if [[ -n "$hostname" ]]; then
echo "Устанавливаем имя хоста: $hostname"
hostnamectl set-hostname "$hostname"
else
echo "Имя хоста не было введено, пропускаем этот шаг"
fi
echo ""
echo "=== Настройка сетевых интерфейсов ==="
# 2. Настройка enp0s8 (в сторону BR-FW)
echo "Настройка интерфейса enp0s8 (сторона BR-FW)"
read -p "Введите IP адрес для enp0s8 в формате адрес/префикс: " ip_enp0s8
if [[ -n "$ip_enp0s8" ]]; then
echo "Настраиваем enp0s8 с адресом: $ip_enp0s8"
# Создаем файл конфигурации для enp0s8
cat > /etc/NetworkManager/system-connections/enp0s8.nmconnection << EOF
[connection]
id=enp0s8
uuid=$(uuidgen)
type=ethernet
autoconnect-priority=-999
interface-name=enp0s8
timestamp=$(date +%s)
[ethernet]
[ipv4]
address1=$ip_enp0s8
method=manual
[ipv6]
addr-gen-mode=eui64
method=disabled
[proxy]
EOF
# Права 600 обязательны, иначе NetworkManager проигнорирует файл
chmod 600 /etc/NetworkManager/system-connections/enp0s8.nmconnection
fi
# 3. Настройка enp0s3 (в сторону ISP)
echo "Настройка интерфейса enp0s3 (сторона ISP)"
read -p "Введите через запятую: адрес/префикс,шлюз,DNS: " ip_enp0s3
if [[ -n "$ip_enp0s3" ]]; then
echo "Настраиваем enp0s3 со статическим адресом"
# Разбираем ввод: адрес/префикс,шлюз,DNS
IFS=',' read -ra ADDR <<< "$ip_enp0s3"
ip_with_mask="${ADDR[0]}"
gateway="${ADDR[1]}"
dns="${ADDR[2]}"
cat > /etc/NetworkManager/system-connections/enp0s3.nmconnection << EOF
[connection]
id=enp0s3
uuid=$(uuidgen)
type=ethernet
autoconnect-priority=-999
interface-name=enp0s3
timestamp=$(date +%s)
[ethernet]
[ipv4]
address1=$ip_with_mask
gateway=$gateway
dns=$dns
method=manual
[ipv6]
addr-gen-mode=eui64
method=disabled
[proxy]
EOF
chmod 600 /etc/NetworkManager/system-connections/enp0s3.nmconnection
fi
echo ""
echo "=== Перезапуск NetworkManager ==="
systemctl restart NetworkManager
sleep 3
echo ""
echo "=== Настройка iptables и маршрутизации ==="
# 4. Включение и запуск iptables
systemctl enable --now iptables
echo "Статус iptables:"
systemctl status iptables --no-pager
# 5. Очистка правил iptables и настройка NAT
# NAT делаем на выходе в сторону ISP (enp0s3) для всего, что уходит из локальных сетей
iptables -F
iptables -t nat -F
iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
echo "Добавлено правило NAT (MASQUERADE) на интерфейсе enp0s3"
# 6. Сохранение правил iptables
service iptables save
# 7. Включение IP forwarding
# Пишем в отдельный файл с перезаписью (>), чтобы при повторном запуске строки не дублировались
echo "Включаем IP forwarding..."
echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/99-forwarding.conf
sysctl -p /etc/sysctl.d/99-forwarding.conf
echo ""
echo "=== Проверка настроек ==="
echo "Текущие правила iptables NAT:"
iptables -t nat -L POSTROUTING -n -v
echo ""
echo "Текущее состояние IP forwarding:"
sysctl net.ipv4.ip_forward
echo ""
echo "=== Тестирование соединения ==="
echo "Для проверки можно выполнить следующие команды:"
if [[ -n "$ip_enp0s3" ]]; then
ip1=$(echo "$ip_with_mask" | cut -d'/' -f1)
echo "ping ya.ru -I $ip1"
fi
if [[ -n "$ip_enp0s8" ]]; then
ip2=$(echo "$ip_enp0s8" | cut -d'/' -f1)
echo "ping ya.ru -I $ip2"
fi
echo ""
read -p "Выполнить перезагрузку сейчас? (y/n): " reboot_now
if [[ "$reboot_now" == "y" || "$reboot_now" == "Y" ]]; then
echo "Перезагружаем систему..."
reboot
else
echo "Настройка завершена. Перезагрузите систему для применения всех изменений."
echo "Используйте команду: reboot"
fi