161 lines
5 KiB
Bash
161 lines
5 KiB
Bash
#!/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
|