rubric/modules/linuxmodules/linux_network.go
2026-04-06 11:02:36 +03:00

238 lines
11 KiB
Go
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.

package linuxmodules
import (
"fmt"
"rubric/utils"
)
var NetworkModule = Module{
Key: "network",
Aliases: []string{"net", "ssh", "сеть"},
Title: "Сети и SSH",
Description: "Темы 4244: основы сетей, настройка, SSH",
Run: showNetwork,
}
func showNetwork() {
utils.Header("Linux — Сети и SSH")
// ─── 42. Основы сетей ─────────────────────────────────────────
utils.Section("42. Основы сетей")
utils.Println(utils.ColorBold + "Ключевые понятия:" + utils.ColorReset)
utils.Code(`IP-адрес — уникальный адрес устройства в сети
IPv4: 192.168.1.10 (4 байта, 0-255)
IPv6: 2001:db8::1 (16 байт, hex)
Маска сети — определяет границу сети и хостов
/24 = 255.255.255.0 (256 адресов, 254 хоста)
/16 = 255.255.0.0 (65536 адресов)
Шлюз — маршрутизатор для выхода за пределы сети
DNS — перевод имён в IP (8.8.8.8 = Google DNS)
MAC-адрес — физический адрес сетевого интерфейса
DHCP — автоматическое получение IP от сервера
Приватные сети (RFC 1918):
10.0.0.0/8 (10.x.x.x)
172.16.0.0/12 (172.16-31.x.x)
192.168.0.0/16 (192.168.x.x)
Localhost:
127.0.0.1 — loopback IPv4 (lo)
::1 — loopback IPv6`)
utils.Println(utils.ColorBold + "Информация о сетевых интерфейсах:" + utils.ColorReset)
utils.Command("ip addr", "IP-адреса всех интерфейсов")
utils.Command("ip addr show eth0", "конкретный интерфейс")
utils.Command("ip link", "состояние интерфейсов (UP/DOWN)")
utils.Command("ip route", "таблица маршрутизации")
utils.Command("ip route show default", "шлюз по умолчанию")
utils.Command("ip neigh", "ARP-таблица (MAC → IP)")
fmt.Println()
utils.Code(`# Старые команды (net-tools, устаревшие):
ifconfig # → ip addr
route -n # → ip route
netstat -rn # → ip route
arp -n # → ip neigh`)
utils.Println(utils.ColorBold + "Диагностика сети:" + utils.ColorReset)
utils.Command("ping 8.8.8.8", "проверить доступность хоста")
utils.Command("ping -c 4 google.com", "4 пакета")
utils.Command("ping6 ::1", "ping для IPv6")
utils.Command("traceroute google.com", "маршрут до хоста")
utils.Command("tracepath google.com", "маршрут (без root)")
utils.Command("mtr google.com", "ping + traceroute в реальном времени")
utils.Command("nslookup google.com", "DNS-запрос")
utils.Command("dig google.com", "подробный DNS-запрос")
utils.Command("dig @8.8.8.8 google.com", "DNS через конкретный сервер")
utils.Command("host google.com", "быстрый DNS-запрос")
utils.Command("whois 192.168.1.1", "информация об IP/домене")
fmt.Println()
utils.Println(utils.ColorBold + "Сетевые соединения и порты:" + utils.ColorReset)
utils.Command("ss -tuln", "прослушиваемые порты (t=tcp u=udp l=listen n=numeric)")
utils.Command("ss -tulnp", "с именами процессов (root)")
utils.Command("ss -s", "статистика соединений")
utils.Command("ss -tn state established", "активные TCP-соединения")
utils.Command("netstat -tuln", "аналог ss (устаревший)")
utils.Command("lsof -i :80", "что слушает порт 80")
utils.Command("lsof -i :22", "что слушает порт 22")
utils.Command("nmap -sS 192.168.1.0/24", "сканирование сети (нужно установить)")
utils.Command("nmap -p 22,80,443 server", "проверить конкретные порты")
// ─── 43. Работа с сетью ───────────────────────────────────────
utils.Section("43. Настройка сети")
utils.Println(utils.ColorBold + "Временная настройка (без сохранения):" + utils.ColorReset)
utils.Code(`# Добавить IP:
ip addr add 192.168.1.10/24 dev eth0
# Удалить IP:
ip addr del 192.168.1.10/24 dev eth0
# Включить/выключить интерфейс:
ip link set eth0 up
ip link set eth0 down
# Добавить маршрут:
ip route add 10.0.0.0/8 via 192.168.1.1
ip route add default via 192.168.1.1
# Удалить маршрут:
ip route del default`)
utils.Println(utils.ColorBold + "NetworkManager — постоянная настройка:" + utils.ColorReset)
utils.Code(`# nmcli — командная строка NetworkManager
nmcli device status # список устройств
nmcli connection show # все соединения
nmcli connection show eth0 # параметры соединения
# Статический IP:
nmcli con mod eth0 ipv4.addresses 192.168.1.10/24
nmcli con mod eth0 ipv4.gateway 192.168.1.1
nmcli con mod eth0 ipv4.dns "8.8.8.8 8.8.4.4"
nmcli con mod eth0 ipv4.method manual # static (не DHCP)
nmcli con up eth0 # применить
# DHCP:
nmcli con mod eth0 ipv4.method auto
nmcli con up eth0
# Создать соединение:
nmcli con add type ethernet con-name myconn ifname eth1 \
ipv4.addresses 10.0.0.5/24 ipv4.gateway 10.0.0.1 \
ipv4.method manual
# nmtui — псевдографический интерфейс:
nmtui`)
utils.Println(utils.ColorBold + "DNS-настройка:" + utils.ColorReset)
utils.Code(`# /etc/resolv.conf — DNS-серверы:
nameserver 8.8.8.8
nameserver 8.8.4.4
search mydomain.local # домен для коротких имён
# /etc/hosts — локальное разрешение имён:
127.0.0.1 localhost
192.168.1.10 server01.local server01
# Порядок разрешения (/etc/nsswitch.conf):
hosts: files dns myhostname # сначала /etc/hosts, потом DNS`)
utils.Println(utils.ColorBold + "curl и wget — HTTP-запросы:" + utils.ColorReset)
utils.Command("curl https://example.com", "GET запрос")
utils.Command("curl -I https://example.com", "только заголовки")
utils.Command("curl -o file.txt https://example.com/file", "сохранить в файл")
utils.Command("curl -L https://example.com", "следовать перенаправлениям")
utils.Command("curl -X POST -d 'data' https://api.example.com", "POST запрос")
utils.Command("curl -H 'Authorization: Bearer token' https://api.example.com", "с заголовком")
utils.Command("wget https://example.com/file.tar.gz", "скачать файл")
utils.Command("wget -r -np https://example.com/docs/", "рекурсивно скачать")
// ─── 44. SSH ──────────────────────────────────────────────────
utils.Section("44. Удалённый доступ — SSH")
utils.Println("SSH (Secure Shell) — зашифрованный протокол удалённого доступа.")
fmt.Println()
utils.Println(utils.ColorBold + "Подключение:" + utils.ColorReset)
utils.Command("ssh user@server", "подключиться к серверу")
utils.Command("ssh user@192.168.1.10", "по IP")
utils.Command("ssh -p 2222 user@server", "нестандартный порт")
utils.Command("ssh -i ~/.ssh/mykey user@server", "с конкретным ключом")
utils.Command("ssh -v user@server", "подробный вывод (отладка)")
utils.Command("ssh -A user@server", "пробросить SSH-агент")
fmt.Println()
utils.Println(utils.ColorBold + "SSH-ключи — аутентификация без пароля:" + utils.ColorReset)
utils.Code(`# Генерация пары ключей:
ssh-keygen -t ed25519 -C "alice@example.com" # (рекомендуется)
ssh-keygen -t rsa -b 4096 -C "alice@example.com" # RSA 4096
# Файлы:
~/.ssh/id_ed25519 — приватный ключ (НИКОМУ не передавать!)
~/.ssh/id_ed25519.pub — публичный ключ
# Скопировать публичный ключ на сервер:
ssh-copy-id user@server # автоматически
ssh-copy-id -i ~/.ssh/mykey.pub user@server
# Вручную (добавить в ~/.ssh/authorized_keys на сервере):
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh/`)
utils.Println(utils.ColorBold + "~/.ssh/config — настройка подключений:" + utils.ColorReset)
utils.Code(`# ~/.ssh/config
Host myserver
HostName 192.168.1.10
User alice
Port 22
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
Host bastion
HostName bastion.example.com
User admin
ForwardAgent yes
Host internal
HostName 10.0.0.5
User root
ProxyJump bastion # подключиться через bastion
# Использование:
ssh myserver # вместо ssh alice@192.168.1.10 -i ~/.ssh/id_ed25519`)
utils.Println(utils.ColorBold + "Передача файлов:" + utils.ColorReset)
utils.Command("scp file.txt user@server:/path/", "скопировать на сервер")
utils.Command("scp user@server:/path/file.txt .", "скопировать с сервера")
utils.Command("scp -r dir/ user@server:/path/", "директорию рекурсивно")
utils.Command("rsync -avzP dir/ user@server:/path/", "синхронизация (лучше scp)")
fmt.Println()
utils.Println(utils.ColorBold + "Конфигурация сервера (/etc/ssh/sshd_config):" + utils.ColorReset)
utils.Code(`Port 22 # порт (лучше изменить)
PermitRootLogin no # запретить вход root (рекомендуется)
PasswordAuthentication no # только ключи
PubkeyAuthentication yes # ключи разрешены
AuthorizedKeysFile .ssh/authorized_keys
AllowUsers alice bob # только эти пользователи
MaxAuthTries 3 # попытки аутентификации
# Применить изменения:
sudo systemctl reload sshd
# Проверить конфигурацию:
sudo sshd -t`)
utils.Println(utils.ColorBold + "Туннели SSH (Port Forwarding):" + utils.ColorReset)
utils.Code(`# Локальный туннель (доступ к удалённому сервису через localhost):
ssh -L 8080:localhost:80 user@server
# Теперь http://localhost:8080 = http://server:80
# Удалённый туннель (открыть порт на удалённом сервере):
ssh -R 9090:localhost:3000 user@server
# Теперь server:9090 → localhost:3000
# SOCKS-прокси (динамический туннель):
ssh -D 1080 user@server
# Настроить браузер на SOCKS5 proxy localhost:1080`)
utils.Footer()
}