Port fowarding: Emular IP público no Ubuntu em Virtual Box

2

Eu preciso instalar um aplicativo Demo feito no Ubuntu em uma máquina virtual executada no Windows 10 em um laptop, para ser apresentado a clientes em potencial em diferentes locais no mesmo país, mas esse aplicativo no ambiente virtual deve ser visualizado externamente como tendo um IP exato. A razão para isso é que temos um IP público (digamos, 11.22.33.44, hipotético) fornecido por um ISP, e o acesso deve ser público; Na verdade, uma das maneiras de validar o acesso remoto é pelo IP desse aplicativo. De fato, neste dispositivo virtual, ele estará executando um serviço Cliente (via navegador) através da rede local do cliente (por exemplo, 192.168.a.b), conforme o caso abaixo (valores fictícios),

> ------------------ +
>                    [---------------]                   [------------]
> Guest (Ubuntu)     [ Host (W10)    ]                   [ Web Server ]
> Static IP          [ Static IP     ]--- Internet --- >>[ Static IP  ]
> 11.22.33.44        [ 192.168.0.100 ]                   [ 11.22.33.x ]
>                    [---------------]                   [------------]
> ------------------ +

Mas tudo que eu tentei não funcionou; Eu não posso nem mesmo executar um PING para qualquer IP público com sucesso. No VirtualBox, eu tentei várias combinações, como as seguintes:

Settings >> Network >> NAT >> (virtuo-net) >> Port Fowarding
--TCP: HostIP = blank || HostPort = 6789 || GuestIP = blank || GuestPort = 80
--UDP: HostIP = blank || HostPort = 4567 || GuestIP = blank || GuestPort = 53

No Guest (Ubuntu), eu configurei a seguinte configuração para a Rede, através da interface GUI, bem como via / etc / network / interfaces (embora já tenha sido mencionado aqui que a configuração da GUI tem precedência sobre a configuração manual)

auto 
iface lo inet loopback

auto enp0s3
iface inet enp0s3 static
address 11.22.33.44
netmask 255.255.255.0
network 11.22.33.0
broadcast 11.22.33.254
gateway 11.22.33.1
dns-nameservers 8.8.8.8 8.8.4.4

Alguém poderia me dar uma ideia se estou perdendo alguma coisa?

    
por andre_teprom 21.06.2018 / 22:17

1 resposta

1

Não tenho certeza de por que você está tentando usar o encaminhamento de porta - não está nem perto do que você está tentando fazer.

Em vez disso, sua VM cliente precisa de uma conexão VPN com a rede, onde 11.22.33.44 estaria fisicamente localizada.

Por que o "encaminhamento de porta" não funciona

  1. Você está tentando adicionar regras de "encaminhamento de porta" para traduzir TCP e UDP. Ping não é nenhum dos dois; é o ICMP.

  2. Você está tentando fazer conexões de saída da VM, mas a finalidade do "encaminhamento de porta" é traduzir as conexões de entrada (por exemplo, DNAT do endereço IP do host para convidado). O SNAT seria mais apropriado (se for o caso). Se você escolher a rede "NAT" no VirtualBox, ela executará automaticamente o SNAT, mas ...

  3. O objetivo final do DNAT ("encaminhamento de porta") e do SNAT é traduzir o endereço. Como você configurou 11.22.33.44 na interface de rede da VM, e querem que o 11.22.33.44 seja visível pela Internet externa, parece que a tradução é exatamente o que você não faz quer.

Por que não nada disso funciona

Digamos que você tenha apenas a configuração IP básica: seu sistema operacional convidado está configurado com 11.22.33.44/24 como seu endereço IP e com 11.22.33.1 como gateway.

Problema # 2: Seu exemplo tem o endereço IP do servidor na sub-rede mesmo 11.22.33.0/24 que a VM cliente possui. Se esse é realmente o caso, sua VM assumirá que o servidor está na mesma "LAN virtual" que a própria VM - nunca tentará acessá-la pelo gateway da Internet.

(By the way, o endereço de transmissão para 11.22.33.0/24 é 11.22.33. 255 , não 254. Você poderia ter evitado esse erro por não tentar especificar manualmente o endereço de broadcast em todos: o sistema operacional pode perfeitamente calculá-lo por conta própria.)

Mas digamos que o endereço IP do servidor esteja em uma sub-rede diferente (ou talvez você esteja tentando fazer ping no Google). Então, sim, a VM cliente tentará enviar pacotes através de seu gateway para a Internet. Mas aqui está o que vai acontecer:

  • Se a VM estiver configurada para a rede "NAT", o VirtualBox SNATá todos os pacotes de saída para que pareçam enviados do endereço IP do próprio host (neste caso, 192.168.0.100). Não é isso que você quer.

    Depois que os pacotes traduzidos saem do PC host e alcançam o roteador local do cliente, ele novamente SNATá esses pacotes para que pareçam ter sido enviados pelo endereço IP público do cliente. E isso não é o que você quer, também.

  • Se a VM estiver configurada para a rede "em ponte", o sistema operacional convidado tentará encontrar seu gateway na LAN do cliente - o que obviamente não tem 11.22.33.1.

Se a VM estiver configurada para rede "somente host" e se a interface de LAN virtual correspondente no sistema operacional host estiver configurada como 11.22.33.1/24 e se o sistema operacional host tiver roteamento IP / encaminhamento habilitado (um pouco problemático no Windows), o pacote realmente tem a chance de deixar o PC host inalterado. Mas não vai muito além:

  • É muito provável que o roteador LAN do cliente SNAT o pacote de qualquer maneira, colocando o endereço IP público do cliente como fonte em vez do seu.

  • Se o roteador não executar o SNAT e enviar o pacote sem modificações, ele provavelmente será rejeitado pelo ISP. (Muitos ISPs bloqueiam pacotes com endereços de origem IP 'falsificados', por motivos de segurança esperançosamente óbvios.)

  • Se o pacote escapou do SNAT do roteador e dos filtros anti-spoofing do ISP e alcançou com sucesso o servidor de destino ... as respostas iriam para a rede da sua empresa, pois o endereço IP está realmente localizado. Em outras palavras, servidores aleatórios na Internet realmente não sabem que seu laptop está "pegando emprestado" esse endereço IP.

Como fazer isso funcionar

Em resumo, mesmo que você consiga acessar o servidor, o servidor não poderá entrar em contato com você - suas respostas permanecerão na mesma sub-rede ou viajarão pela Internet, mas em qualquer caso todos os pacotes destinados a 11.22.33.44 chegarão a o seu 'home' ISP e depois na rede da sua empresa.

Então, você precisa de uma maneira de informar à rede da sua empresa como acessar a VM dentro do seu laptop, para que a VM possa receber pacotes destinados a 11.22.33.44. Isso geralmente é feito configurando um túnel , ou uma VPN. (Mesma coisa realmente.)

Você terá que:

  1. configurar um servidor VPN na rede da sua empresa (se já não houver uma);
  2. faz a VM do cliente se conectar à VPN;
  3. configure o servidor da VPN para possuir o endereço IP 11.22.33.44 (uma das várias abordagens possíveis, mas possivelmente a mais simples).
por 21.06.2018 / 23:37