NAT avançado - Misture PAT com NAT

NAT avançado - Misture PAT com NAT

Acabei de configurar um servidor Ubuntu como roteador com NAT/PAT e estou tentando fazer o seguinte:

Trabalho para uma escola que dividiu sua rede em redes menores conectadas por roteadores. Preciso criar um endereço IP visível na rede interna de uma sala que encaminhe todo o tráfego para um endereço IP externo.

Para explicar, esta é a configuração:

NAT externo: eth1 - 192.168.1.254/24

NAT interno: br0 - 192.168.2.10, mascaramento habilitado

Preciso criar um endereço como 192.168.2.1, também para br0, que encaminharia todo o seu tráfego para o ip 192.168.1.1, e apareceria como se esse IP estivesse conectado diretamente à rede, mas NÃO teria o mascaramento habilitado nele .

A ideia básica é que o endereço do roteador br0 seja configurado para 192.168.2.10, e também br0 tenha outro endereço que não se masquere, e encaminhe todo o tráfego para 192.168.1.1, sendo esse o endereço do roteador principal. A razão para isso é que br0 é uma ponte entre a rede física e uma VPN que seria acessada por trás de um roteador com o mesmo endereço do endereço IP NAT de destino – 192.168.1.1. Como não posso garantir que os clientes sempre possam emitir um comando "route add", preciso de uma maneira de contornar isso.

Descobri como configurar endereços IP secundários para br0 e configurei br0:1 como 192.168.2.1, mas não consigo encaminhar todo o tráfego para 192.168.1.1.

Agradeço antecipadamente pela sua ajuda.

Responder1

O que você está tentando fazer, se bem entendi, é efetivamente uma forma de roteamento de política com algum NAT envolvido. Parece que você está apenas tentando criar um alias para algum host fora de uma sub-rede roteada específica que esteja nessa sub-rede.

Você pode criar regras DNAT sem SNAT correspondente (ou mascaramento). A razão pela qual isso não é feito é meramente porque a maior parte do NAT é projetada para solucionar um problema de conectividade, em que os endereços no "interior" do NAT não seriam roteáveis ​​de outra forma "do lado de fora". Se de fato o host 192.168.1.1 tiver uma rota de volta para 192.168.2.0/24 ou o que quer que seja, você pode simplesmente configurar uma regra DNAT, se bem me lembro:

iptables -t nat -A PREROUTING -s 192.168.2.0/24 -d 192.168.2.1 -j DNAT --to 192.168.1.1

Agora, pare por um momento e não faça isso ainda.

Isso funciona quando 192.168.2.1 é um endereço de destino (e cria uma peculiaridade estranha em que o endereço que responde ao tráfego é diferente do destino original). Não acho que seja isso que você queira fazer, pela sua descrição, embora, honestamente, não tenha certeza. Fazer DNAT não ajudará em nada se o host 192.168.2.1 funcionar como um roteador e não como um destino. Se for para funcionar como um roteador, o NAT (ou PAT) não ajudará em nada.

Parece que você está recebendo tráfego VPN que acaba conectado a esta sub-rede 192.168.2.0/24 se eu estiver lendo você corretamente e preenchendo os espaços em branco como estão, e ele precisa ser divulgado para o mundo inteiro ou para algum subconjunto de através deste gateway 192.168.1.1. Nesse caso, o que se deve fazer ésimplesmente atribua 192.168.2.1/24 (que suponho que você tenha definido como gateway padrão nos clientes VPN) ao seu roteador, certifique-se de que o encaminhamento esteja ativado e pronto - os clientes VPN nunca precisam se preocupar com o próximo salto ser 192.168.1.1, assim como seu gateway não VPN padrão original (gateway doméstico?); eles desconhecem completamente isso enquanto o pacote transita. Os ISPs usam esse tipo de esquema com endereços RFC1918 o tempo todo para evitar o desperdício de endereços roteáveis ​​acidentalmente escassos; não é um requisito que todos os roteadores ao longo do caminho tenham endereços exclusivos (embora, quando isso acontece, a solução de problemas seja muito mais fácil). O truque aqui é que os pontos finais de uma conexão TCP não precisam saber nada além do endereço IP do próximo salto.

Se você já está fazendo isso e está com problemas, verifique o caminho de retorno. Provavelmente, seu gateway em 192.168.1.1 não está fazendo NAT para esses endereços ao enviar o tráfego para fora do seu NAT (que ainda será visto como 192.168.2.0/24), está protegendo-os com firewall ou não tem uma rota de retorno apropriada para 192.168.2.0/24.

Se entendi mal sua intenção em ambos os aspectos, há uma terceira coisa que pode ajudá-lo. A única maneira de especificar um gateway no iptables é com o destino TEE, que clona o pacote e roteia o clone inalterado para algum host arbitrário. Você precisaria lidar com o pacote não clonado de alguma forma. Esse alvo pode ser adicionado na cadeia mangle PREROUTING:

iptables -t mangle -A PREROUTING -s 192.168.2.0/24 -j TEE --gateway 192.168.1.1

Isso é uma coisa estranha de se fazer; isso foi projetado para registrar o tráfego, não para encaminhá-lo. Você poderia descartar o pacote original em algum estágio posterior do iptables, suponho, embora isso seja uma bagunça e eu realmente não o recomende.

Como ponto aleatório, você pode adicionar endereços IP adicionais às interfaces usando o ip addr addcomando. Não use net-tools (ifconfig); ele é antigo e falta muitos recursos e só lhe causará dores de cabeça no longo prazo.

informação relacionada