1

Я пытаюсь перенаправить определенный диапазон портов на хосте Linux на одну из гостевых виртуальных машин. Я хотел бы, чтобы это перенаправление применялось ко всем интерфейсам хоста, включая localhost. Я смог сделать:

iptables -I FORWARD -m state -d 192.168.122.0/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -I PREROUTING -p tcp --dport 8000:8500 -j DNAT --to 192.168.122.158

Где 8000:8500 - диапазон, который меня интересует, а 192.168.122.158 - IP-адрес гостя. Это работает до тех пор, пока я пытаюсь подключиться с другой машины, т.е. не с хоста виртуальной машины. Но я также хотел бы иметь возможность перенаправлять трафик, который происходит внутри хоста VM.

Надеюсь, это понятно, извините, если я исказил терминологию.

2 ответа2

1

Очевидно, что выполнение DNAT для петлевого трафика невозможно - например, посмотрите этот вопрос или это обсуждение пользователя debian. Использование REDIRECT работает, потому что трафик остается на интерфейсе обратной связи, но пересылка трафика на другую машину не работает.

Вы можете использовать программу пространства пользователя для пересылки TCP-соединений - например, xinetd со следующей конфигурацией перенаправит порт 8000 на вашу виртуальную машину:

service forward_8000
{
        type                    = UNLISTED
        port                    = 8000
        socket_type             = stream
        wait                    = no
        user                    = root
        redirect                = 192.168.122.158 8000
}

Однако таким способом невозможно перенаправить диапазон портов - для каждого порта требуется отдельное определение службы.

0

Локальные пакеты не будут входить в цепочку PREROUTING . Я считаю, что вам нужно будет использовать цепочку OUTPUT в таблице NAT, чтобы сделать это:

iptables -t nat -I OUTPUT -p tcp --dport 8000:8500 -j DNAT --to 192.168.122.158

Возможно, вам также понадобится добавить правило в цепочку фильтров, которое разрешает эти исходящие и связанные с ними пакеты:

iptables -I OUTPUT -m state -d 192.168.122.158 --state NEW,RELATED,ESTABLISHED -j ACCEPT

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .