# ============================================================================ # Сервис №10 по плану (docs/ai/migration-tofu.md, раздел 5): ovpn-mini. # Терминирует OpenVPN-туннель ru-vps <-> LAN (gateway-конец, 10.78.0.2). # Через него идёт ProxyJump ко всем LXC вне LAN и обратный путь reverse-proxy. # ПЕРЕЕЗД ТОЛЬКО ИЗ ЛОКАЛЬНОЙ СЕТИ: вне LAN прогон оборвёт себе транспорт. # # OLD vmid 132, узел mini-pc, боевой адрес 192.168.1.23. # Эталон снят 2026-09-02: ssh mini-pc sudo pct config 132 (дословно совпадает # с /etc/pve/lxc/132.conf): # # arch: amd64 # cmode: shell # cores: 1 # features: nesting=1 # hostname: ovpn-mini # memory: 256 # nameserver: 1.1.1.1 # net0: name=eth0,bridge=vmbr0,firewall=1,gw=192.168.1.1,ip=192.168.1.23/24,type=veth # onboot: 1 # ostype: debian # rootfs: local-lvm:vm-132-disk-0,size=8G # startup: order=30 # swap: 128 # unprivileged: 1 # lxc.cgroup2.devices.allow: c 10:200 rwm # /dev/net/tun # lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file # # vm_id 160 — новый VMID для blue-green переезда (назначен, не менять). # TMPIP 192.168.1.19 используется только на шаге 4.3. После шага 4.5.15 адрес # меняется на боевой 192.168.1.23, OLD (132) останавливается и остаётся # откатом минимум неделю. # # --- features: только nesting --------------------------------------------- # Эталон: features: nesting=1 — ни keyctl, ни fuse. Оставлено как есть: # OpenVPN-шлюзу этот функционал не нужен. # # --- /dev/net/tun: device_passthrough ------------------------------------ # В эталоне проброшен сырыми lxc.cgroup2.devices.allow + lxc.mount.entry # (play "Allow TUN device" в pve-ovpn-mini.yml). Штатная декларация — # device_passthrough (dev0:), проверена на пилоте VMID 199 и на mihomo. # Требует root@pam. # # --- Конфигурация и данные ---------------------------------------------- # pve-ovpn-mini.yml конфигурационной части НЕ содержит (только создание + # проброс TUN). Настраивает playbooks/openvpn-vps-mini.yml (роль # openvpn_gateway, группа vpn_openvpn = ru-vps + ovpn-mini). # Единственные данные для переноса: /etc/openvpn/homelab/static.key — # общий статический ключ с ru-vps. Остальное (homelab.conf, up.sh, down.sh, # systemd-юнит) роль рендерит заново. LAN-адрес ovpn-mini ни в одном шаблоне # роли не фигурирует (masquerade идёт по `-o eth0`), поэтому туннель не # зависит от смены адреса — меняется только VMID. # # --- roles/pve_lxc ----------------------------------------------------- # До этого переезда ovpn-mini был единственным потребителем roles/pve_lxc. # После него роль не подключена нигде — кандидат на удаление, см. # docs/ai/migration-tofu.md раздел 6. # ============================================================================ resource "proxmox_virtual_environment_container" "ovpn_mini" { node_name = "mini-pc" vm_id = 160 unprivileged = true start_on_boot = true started = true tags = ["tofu"] initialization { hostname = "ovpn-mini" ip_config { ipv4 { address = "192.168.1.23/24" gateway = "192.168.1.1" } } dns { servers = ["1.1.1.1"] } user_account { keys = [trimspace(file(pathexpand("~/.ssh/id_ed25519_homelab.pub")))] } } operating_system { template_file_id = "local:vztmpl/debian-13-standard_13.1-2_amd64.tar.zst" type = "debian" } cpu { cores = 1 } memory { dedicated = 256 swap = 128 } disk { datastore_id = "local-lvm" size = 8 } # Эталон: features: nesting=1 (без keyctl/fuse). features { nesting = true } # /dev/net/tun: в эталоне — сырые lxc.* строки. Штатная декларация dev0:. device_passthrough { path = "/dev/net/tun" } # roles/pve_lxc всем контейнерам ставит cmode=shell (pve_lxc_cmode), провайдер # это отслеживает через блок console.type — без него на следующем apply # откатит на дефолт Proxmox tty. Обнаружено 2026-09-02 на emergency-bot, # см. tofu/README.md. console { type = "shell" } network_interface { name = "eth0" bridge = "vmbr0" firewall = true } startup { order = 30 } } output "ovpn_mini" { description = "Что проверять на узле после apply" value = { vmid = proxmox_virtual_environment_container.ovpn_mini.vm_id node = proxmox_virtual_environment_container.ovpn_mini.node_name verify = "ssh mini-pc sudo pct config ${proxmox_virtual_environment_container.ovpn_mini.vm_id}" } }