net/isp_module_1.sh
2026-01-20 15:16:22 +05:00

234 lines
6.4 KiB
Bash
Raw 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
# Скрипт настройки ISP хоста
# Проверяем, запущен ли скрипт от root
if [[ $EUID -ne 0 ]]; then
echo "Этот скрипт должен быть запущен с правами root"
exit 1
fi
echo "=== Настройка ISP хоста ==="
# 1. Установка имени хоста
read -p "Введите имя хоста (например: isp.au-team.irpo): " hostname
if [[ -n "$hostname" ]]; then
echo "Устанавливаем имя хоста: $hostname"
hostnamectl set-hostname "$hostname"
exec bash
else
echo "Имя хоста не было введено, пропускаем этот шаг"
fi
echo ""
echo "=== Настройка сетевых интерфейсов ==="
# 2. Настройка enp0s8
echo "Настройка интерфейса enp0s8 (HQ-RTR)"
read -p "Введите IP адрес для enp0s8 (например: 172.16.4.1/28): " 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
chmod 600 /etc/NetworkManager/system-connections/enp0s8.nmconnection
fi
# 3. Настройка enp0s9
echo ""
echo "Настройка интерфейса enp0s9 (BR-RTR)"
read -p "Введите IP адрес для enp0s9 (например: 172.16.5.1/28): " ip_enp0s9
if [[ -n "$ip_enp0s9" ]]; then
echo "Настраиваем enp0s9 с адресом: $ip_enp0s9"
# Создаем файл конфигурации для enp0s9
cat > /etc/NetworkManager/system-connections/enp0s9.nmconnection << EOF
[connection]
id=enp0s9
uuid=$(uuidgen)
type=ethernet
autoconnect-priority=-999
interface-name=enp0s9
timestamp=$(date +%s)
[ethernet]
[ipv4]
address1=$ip_enp0s9
method=manual
[ipv6]
addr-gen-mode=eui64
method=disabled
[proxy]
EOF
chmod 600 /etc/NetworkManager/system-connections/enp0s9.nmconnection
fi
# 4. Настройка enp0s3 (внешний интерфейс)
echo ""
echo "Настройка интерфейса enp0s3 (внешний, в интернет)"
read -p "Использовать DHCP для enp0s3? (y/n): " use_dhcp
if [[ "$use_dhcp" == "y" || "$use_dhcp" == "Y" ]]; then
echo "Настраиваем enp0s3 на получение адреса по DHCP"
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]
method=auto
[ipv6]
addr-gen-mode=eui64
method=disabled
[proxy]
EOF
else
read -p "Введите статический IP для enp0s3 (формат: IP/маска, шлюз, DNS): " ip_enp0s3
if [[ -n "$ip_enp0s3" ]]; then
echo "Настраиваем enp0s3 со статическим адресом"
# Разбираем ввод (ожидается формат: 192.168.1.2/24,192.168.1.1,8.8.8.8)
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
fi
fi
chmod 600 /etc/NetworkManager/system-connections/enp0s3.nmconnection
echo ""
echo "=== Перезапуск NetworkManager ==="
systemctl restart NetworkManager
sleep 3
echo ""
echo "=== Настройка iptables и маршрутизации ==="
# 5. Включение и настройка iptables
systemctl enable --now iptables
echo "Статус iptables:"
systemctl status iptables --no-pager
# 6. Очистка правил iptables и настройка NAT
iptables -F
iptables -t nat -F
# Определяем подсети из введенных адресов
if [[ -n "$ip_enp0s8" ]]; then
# Извлекаем подсеть из формата IP/маска
subnet1=$(echo "$ip_enp0s8" | cut -d'/' -f1 | cut -d'.' -f1-3)
mask1=$(echo "$ip_enp0s8" | cut -d'/' -f2)
iptables -t nat -A POSTROUTING -s $subnet1.0/$mask1 -o enp0s3 -j MASQUERADE
echo "Добавлено правило NAT для подсети: $subnet1.0/$mask1"
fi
if [[ -n "$ip_enp0s9" ]]; then
subnet2=$(echo "$ip_enp0s9" | cut -d'/' -f1 | cut -d'.' -f1-3)
mask2=$(echo "$ip_enp0s9" | cut -d'/' -f2)
iptables -t nat -A POSTROUTING -s $subnet2.0/$mask2 -o enp0s3 -j MASQUERADE
echo "Добавлено правило NAT для подсети: $subnet2.0/$mask2"
fi
# 7. Сохранение правил iptables
service iptables save
# 8. Включение IP forwarding
echo "Включаем IP forwarding..."
sysctl net.ipv4.ip_forward=1 >> /etc/sysctl.conf
sysctl -p
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_enp0s8" ]]; then
ip1=$(echo "$ip_enp0s8" | cut -d'/' -f1)
echo "ping ya.ru -I $ip1"
fi
if [[ -n "$ip_enp0s9" ]]; then
ip2=$(echo "$ip_enp0s9" | 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