Перенаправление портов брандмауэром Proxmox делает порт непригодным для других подключений.

У меня есть сервер, размещенный hetzner, с одним общедоступным IP-адресом, на котором работает proxmox и несколько виртуальных машин. Этот IP-адрес настраивается внутри /etc/interfaces следующим образом:

auto enp35s0
iface enp35s0 inet static
    address {{my-public-ip}}/{{subnet}}
    gateway {{hetzner-gateway}}
    up route add -net {{hetzner-ip}} netmask 255.255.255.192 gw {{hetzner-gateway}} dev enp35s0

Эта конфигурация была сделана hetzner.

Поскольку я не хочу получать дополнительные IP-адреса от hetzner, я маскирую этот IP-адрес для внутренней виртуальной машины. -Сеть.:

auto vmbr0
iface vmbr0 inet static
    address 172.16.0.1/24
    bridge-ports none
    bridge-stp off
    bridge-fd 0

    post-up   echo 1 > /proc/sys/net/ipv4/ip_forward
    post-up   iptables -t nat -A POSTROUTING -s '172.16.0.0/24' -o enp35s0 -j MASQUERADE
    post-down iptables -t nat -D POSTROUTING -s '172.16.0.0/24' -o enp35s0 -j MASQUERADE

Благодаря этому мои виртуальные машины имеют доступ в Интернет и могут подключаться друг к другу.

Поскольку переадресация портов через iptables для меня слишком сложна, я начал использовать firewalld. Там мой интерфейс enp35s0 назначен внешней зоне, а vmbr0 — доверенной. Я знаю, что, возможно, мне следует назначить его для внутреннего использования, но в настоящее время это не имеет особого значения (или я так думаю в моем проблемном случае).

Теперь у меня есть служба, работающая внутри виртуальной машины с IP-адресом 172.16.0.3 на порту 38080. Чтобы получить доступ к этой службе, я добавляю правило переадресации портов в firewalld:port=38080:proto=tcp:toport=38080:toaddr=172.16.0.3. Благодаря этому я могу получить доступ к этой службе из-за пределов этого сервера. Теперь проблема в том, что если я использую программное обеспечение, такое как uptime-kuma, и запускаю его также внутри виртуальной машины на той же физической машине, я не могу получить доступ к этой службе через порт 38080, потому что переадресация портов выполняется только для внешних запросов.. Здесь важно то, что имя хоста, которое использует uptime-kuma, является полным доменным именем, которое преобразуется в общедоступный IP-адрес моего хост-компьютера. Поэтому, чтобы сделать это возможным, я добавляю то же правило переадресации портов в доверенную зону firewalld, потому что мой интерфейс vmbr0 находится там, и с этого интерфейса поступает запрос. Теперь это соединение работает, и мое программное обеспечение (uptime-kuma)может связаться с моей службой.

Сейчас большая проблема заключается в том,что КАЖДЫЙ запрос из виртуальной сети, который хочет использовать порт 38080, перенаправляется на эту виртуальную машину (172.16.0.3), даже те, которые идут на совершенно другой сервер.

Как указать firewalld перенаправлять этот трафик только в том случае, если запрос действительно направлен на хост-компьютер?

0
задан 14 October 2021 в 13:37
1 ответ

Таким образом, я не мог найти решение проблемы поведения firewalld, но я нашел кое-что еще, что сделало правило переадресации портов в доверенной зоне ненужным. Добавив полное доменное имя, которое будет разрешаться в общедоступный IP-адрес хоста, в файл /etc/hosts внутри виртуальной машины, мне больше не нужна переадресация порта, потому что он мгновенно снова подключается к себе (, что я и хотел в первую очередь ). Используя эти правила переадресации портов внутри доверенной зоны, больше не нужно, и я могу снова использовать эти порты для внешних запросов.

0
ответ дан 20 October 2021 в 12:11

Теги

Похожие вопросы