{% extends "base.html" %} {% from "_ui.html" import icon, badge, alert, empty %} {% set page_title = 'Сеть и доступ' %} {% block page_header %} {% endblock %} {% block content %} {% if diagnostics %} {% set failed = diagnostics.checks|rejectattr('ok')|list %}

Проверка доступа: {{ diagnostics.vm_name }}, порт {{ diagnostics.external_port }}

{{ diagnostics.protocol|upper }} {{ diagnostics.external_port }} → {{ diagnostics.vm_ip or 'IP не найден' }}:{{ diagnostics.guest_port }}

{% if failed %}{{ badge('Есть проблемы: ' ~ failed|length, 'warning') }}{% else %}{{ badge('Всё в порядке', 'success') }}{% endif %}
{{ alert('warning' if failed else 'success', diagnostics.verdict) }}
{% for check in diagnostics.checks %}
{{ icon('circle-check' if check.ok else 'circle-x') }}
{{ check.name }}{{ check.detail|truncate(160) }}
{% endfor %}
{% endif %}

Доступ из интернета

Порты сервера, которые ведут внутрь машин

{% if ctx.forwards %}
{% endif %}
{% if ctx.forwards %}
{% for item in ctx.forwards %} {% set service = item.note or (item.guest_port|port_service) or ('Порт ' ~ item.guest_port_label) %}
{{ icon('globe') }}
{{ service }}
Сервер : {{ item.external_port_label }} → {{ item.vm_name }} : {{ item.guest_port_label }} · {{ item.protocol|upper }}{% if item.is_range %} · диапазон{% endif %}
{% endfor %}
{% else %} {{ empty('shield-check', 'Всё закрыто', 'Машины выходят в интернет, но снаружи к ним подключиться нельзя. Откройте нужный порт в форме справа.') }} {% endif %}

Открыть доступ

Сделайте сервис машины доступным снаружи

{% if vms %}
{{ icon('wrench', 'icon-sm') }}Дополнительно{{ icon('chevron-down', 'icon-sm') }}
«auto» — определить автоматически
{% else %} {% endif %}

Внутренняя сеть машин

Через неё машины выходят в интернет

{% if ctx.nat.exists %}{{ badge('Работает', 'success') }}{% else %}{{ badge('Не создана', 'warning') }}{% endif %}
Адреса машин{{ ctx.nat.subnet }}
Шлюз{{ ctx.nat.gateway }}
Выход в интернет{{ ctx.external_interface }}
Маршрутизация{{ 'Включена' if ctx.ip_forward == 'enabled' else 'Выключена' }}

Адреса машин

Если адрес не определился сам, укажите его вручную

{% for vm in vms %}
{{ icon('monitor') }}
{{ vm.name }}
{{ vm.ip if vm.ip and vm.ip != '—' else 'адрес не определён' }}{% if vm.manual_ip %} · задан вручную{% endif %}
{% else %}
Машин пока нет
{% endfor %}
{{ icon('terminal', 'icon-sm') }}Для специалистов: DHCP и правила nftables{{ icon('chevron-down', 'icon-sm') }}
virsh net-dhcp-leases {{ ctx.nat.name }}
{{ ctx.nat.leases or '—' }}
/etc/virtuality/nftables/virtuality.nft
{{ ctx.nft_rules }}
{% endblock %} {% block scripts %} {% endblock %}