Como faço para rotear um intervalo de portas em um host linux para uma VM guest?

1

Estou tentando redirecionar um determinado intervalo de portas em um host linux para uma de suas VMs convidadas. Eu gostaria que este redirecionamento se aplicasse a todas as interfaces do host, incluindo localhost. Consegui fazer:

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

Onde 8000: 8500 é o intervalo que eu estou interessado em encaminhamento e 192.168.122.158 é o IP do convidado. Isso funciona enquanto eu estou tentando se conectar de outra máquina, ou seja, não o host da VM. Mas eu também gostaria de poder encaminhar o tráfego originado dentro do host da VM.

Espero que esteja claro, desculpe se eu estraguei a terminologia.

    
por samwise 11.05.2013 / 00:05

2 respostas

1

Aparentemente, a exibição de DNAT para tráfego de loopback não é possível - por exemplo, consulte esta pergunta ou esta discussão do usuário debian . Usar REDIRECT funciona porque o tráfego permanece na interface de loopback, mas o encaminhamento do tráfego para outra máquina não funciona.

Você pode usar um programa de espaço do usuário para encaminhar conexões TCP. Por exemplo, xinetd com a seguinte configuração encaminhará a porta 8000 para sua VM:

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

No entanto, não é possível redirecionar um intervalo de portas dessa maneira - todas as portas precisam de uma definição de serviço separada.

    
por 15.05.2013 / 09:30
0

Os pacotes locais não entrarão na cadeia PREROUTING . Acredito que você precisará usar a cadeia OUTPUT na tabela NAT para fazer isso:

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

Você possivelmente também precisará adicionar uma regra à cadeia de filtros que permita esses pacotes de saída e seus relacionados:

iptables -I OUTPUT -m state -d 192.168.122.158 --state NEW,RELATED,ESTABLISHED -j ACCEPT
    
por 11.05.2013 / 00:36