A conexão com o servidor localhost resulta em um endereço de cliente não localhost

0

Eu tenho um laptop com uma configuração de rede um pouco estranha: para poder encaminhar qualquer acesso à Internet de minhas VMs e contêineres para qualquer rota padrão que meu laptop tenha (que poderia ser wlan0 , eth0 ou ppp0 ), defini o usual sysctl net.ipv4.ip_forward=1 e o seguinte em /etc/network/interfaces :

auto lxcbr0

iface lxcbr0 inet static
        address 192.168.56.1
        netmask 255.255.255.0
        bridge_ports none
        bridge_fd 0
        bridge_maxwait 0
        # XXX: no --out-interface
        up iptables -t nat -A POSTROUTING -j MASQUERADE
        down iptables -t nat -D POSTROUTING -j MASQUERADE

Eu uso o NetworkManager para obter minha conexão com a Internet. Até agora, isso funcionou normalmente, até que eu tentei executar fossil ui e a conexão com 127.0.0.1 nesta configuração resulta no endereço do cliente sendo de uma sub-rede diferente.

Por exemplo, o seguinte script Perl:

#!/usr/bin/perl
use 5.020;
use IO::Socket::INET;
say IO::Socket::INET::->new(
        Proto=>"tcp", Listen=>0,
        LocalAddr=>"127.0.0.1:8080",
        ReuseAddr=>1, ReusePort=>1,
)->accept->peerhost;

normalmente imprime 127.0.0.1 se eu usar nc 127.0.0.1 8080 para se conectar a ele (e isso acontece em minhas outras máquinas), mas neste laptop ele imprime 192.168.1.11 (que é de fato o endereço de wlan0 minha rota padrão atual reside).

Eu tentei adicionar uma rota especial a 127.0.0.0/8 via lo , mas isso não mudou nada.

Como faço para que conexões de host local se comportem como se fossem realmente de localhost?

    
por aitap 02.10.2017 / 12:20

1 resposta

1

Adicionar o ! --out-interface lo à regra de firewall NAT resolveu o problema: agora lo access é regido pelas leis usuais e não está sujeito a nenhum mascaramento (como não deveria).

    
por 02.10.2017 / 12:20

Tags