# Сеть: SSH, Firewall, NetworkManager Как настроить сетевые сервисы. ## Где сетевые настройки? Сеть находится в двух местах: ``` modules/networking/default.nix ← NetworkManager, Firewall modules/services/default.nix ← SSH и другие сервисы ``` ## SSH настройки SSH находится в `modules/services/default.nix`. ### Текущие настройки ```nix settings = { # Только публичные ключи PasswordAuthentication = false; PubkeyAuthentication = true; # root не может логиниться PermitRootLogin = "no"; # Максимум попыток: 3 MaxAuthTries = 3; # Максимум сессий: 2 MaxSessions = 2; }; ``` ### Открыть SSH на определённый порт В `modules/networking/default.nix`: ```nix # По умолчанию открыт порт 22 networking.firewall.allowedTCPPorts = [ 22 ]; # Если хочешь другой порт (например 2222): networking.firewall.allowedTCPPorts = [ 2222 ]; ``` И в `modules/services/default.nix`: ```nix services.openssh.settings = { Port = 2222; # Добавить эту строку }; ``` ## Firewall Firewall находится в `modules/networking/default.nix`. ### Открыть порты ```nix networking.firewall.allowedTCPPorts = [ 22 ]; # SSH # Добавить новые порты: networking.firewall.allowedTCPPorts = [ 22 8080 3000 ]; ``` ### Открыть приложение ```nix # Автоматически открыть порты для приложения services.transmission.openFirewall = true; services.minecraft-server.openFirewall = true; ``` ## NetworkManager NetworkManager позволяет управлять Wi-Fi и Ethernet. ### Статус ```bash # Статус сети nmcli status # Список Wi-Fi сетей nmcli dev wifi list # Подключиться к Wi-Fi nmcli dev wifi connect "SSID" password "password" ``` ## Настройка Hostname В `modules/networking/default.nix`: ```nix networking.hostname = "nixos-vm"; # Изменить на: networking.hostname = "my-machine"; ``` ## Интернет соединение ### Справка: NetworkManager управляет: - Wi-Fi (connect/disconnect) - Ethernet (автоматическое подключение) - VPN (при установке клиента) - Прокси (конфигурация) ### Команды ```bash # Включить/выключить Wi-Fi nmcli radio wifi on/off # Список подключений nmcli con show # Отключиться от сети nmcli con down "connection-name" ``` ## VPN VPN поддержка уже подготовлена в `modules/services/default.nix`: ```nix # AmneziaVPN поддержка services.amnezia.enable = true; # Если добавлено ``` ## DNS Если нужно изменить DNS серверы: ```nix # В modules/networking/default.nix networking.nameservers = [ "1.1.1.1" "8.8.8.8" ]; ``` ## Проверка после изменений ```bash # Применить конфигурацию nh os switch # Проверить статус systemctl status networking systemctl status ssh # Проверить firewall sudo firewall-cmd --list-ports # Если используется firewalld ``` ## Диагностика ### SSH не работает? ```bash # Проверить статус systemctl status ssh # Посмотреть логи sudo journalctl -u sshd -f # Перезагрузить SSH sudo systemctl restart ssh ``` ### Нет интернета? ```bash # Проверить соединение ping 8.8.8.8 # Проверить DNS nslookup google.com # NetworkManager статус nmcli status # Перезагрузить NetworkManager sudo systemctl restart NetworkManager ``` ### Firewall блокирует? ```bash # Проверить открытые порты sudo nftables list tables # Или через nmap nmap localhost # Сканирование локального машина # Проверить конкретный порт sudo netstat -tlnp | grep :8080 ``` ## SSH ключи ### Генерировать ключ (если нет) ```bash ssh-keygen -t ed25519 -C "ada.dmitry@gmail.com" # или ssh-keygen -t rsa -b 4096 -C "ada.dmitry@gmail.com" ``` ### Добавить публичный ключ Содержимое `~/.ssh/id_ed25519.pub` нужно добавить на сервер в `~/.ssh/authorized_keys`. ## Общие команды ```bash # Сетевые интерфейсы ip link show # IP адреса ip addr show # Маршруты ip route show # Слушающие порты sudo netstat -tlnp # DNS кэш systemctl status systemd-resolved ```