Рейтинг:0

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

флаг in

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

авто enp35s0
iface enp35s0 инет статический
    адрес {{мой-публичный-ip}}/{{подсеть}}
    шлюз {{hetzner-шлюз}}
    up route add -net {{hetzner-ip}} сетевая маска 255.255.255.192 gw {{hetzner-gateway}} dev enp35s0

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

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

авто вмбр0
iface vmbr0 инет статический
    адрес 172.16.0.1/24
    мостовые порты
    мост-стп выкл.
    мост-fd 0

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

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

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

TheAnachronism avatar
флаг in
Мой текущий обходной путь - использовать порты, которые не требуются для каких-либо внешних служб, но это не может быть решением этой проблемы.
Рейтинг:0
флаг in

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

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.