FreeBSD jail como gateway

2

Estou tentando configurar uma cadeia que servirá como um gateway padrão para alguns dos meus clientes externos.

Eu tenho uma cadeia VIMAGE que tem um endereço IP dedicado na minha rede local que eu quero usar como um gateway para meus clientes. A razão pela qual estou fazendo isso, se for importante, é que eu quero rodar o OpenVPN dentro da cadeia para que todos os meus clientes usando o IP da cadeia como um gateway passem pela VPN de forma transparente.

Quando eu ssh na prisão tudo funciona: eu posso ver a Internet, mesmo quando eu ligar o OpenVPN ele funciona como esperado. No entanto, ele não funciona como um gateway padrão para meus clientes: os nomes não são resolvidos, "não há rota para hospedar", etc.

Quando executo tcpdump dentro da cadeia, vejo o seguinte:

20:53:23.263597 IP 192.168.1.6.54460 > syd15s01-in-f78.1e100.net.https: UDP, length 109
20:53:23.263636 IP 192.168.1.6.54460 > syd15s01-in-f78.1e100.net.https: UDP, length 109

onde 192.168.1.6 é o IP do cliente, então presumo que o cliente tente acessar a Internet pela cadeia, mas nada volta. Às vezes, também vejo algum tráfego ICMP .

Meu ipfw config é:

# less /usr/local/etc/ipfw.rules
#!/bin/sh

EPAIR=$(/sbin/ifconfig -l | tr " " "\n" | /usr/bin/grep epair)
INNER="$(/sbin/ifconfig | grep " -->" | cut -d' ' -f2 | cut -d'.' -f1-3).0/24"
ipfw -q -f flush
ipfw -q nat 1 config if ${EPAIR}
ipfw -q add nat 1 all from ${INNER} to any via ${EPAIR}
ipfw -q add nat 1 all from any to any in via ${EPAIR}
# ipfw add check-state

TUN=$(/sbin/ifconfig -l | tr " " "\n" | /usr/bin/grep tun)
ifconfig ${TUN} name tun0

Suponho que falta algum NAT em algum lugar, mas eu realmente não entendo o que está acontecendo, então qualquer ajuda é apreciada.

O que devo fazer para permitir que o tráfego de meus clientes passe pelo jail / vpn quando eles usam o IP do jail como gateway padrão?

    
por Alexey Raga 17.10.2016 / 12:43

1 resposta

1

As cadeias do FreeBSD são basicamente uma espécie de virtualização leve, então é o melhor propósito - é rodar alguns aplicativos como contêineres. Certamente tem uma pilha de rede, mas, comparando sua funcionalidade com uma funcionalidade de um sistema host, eu diria que é bastante limitado.

Portanto, escolher uma cadeia como roteador de contêiner parece ser uma má escolha. O que você deve fazer - é usar vários FIBs. A propósito, a mesma abordagem se aplica a todos os sistemas operacionais modernos - Linux, JunOS, Cisco IOS, etc.

Eu recomendaria adicionar net.fibs="4" em /boot/loader.conf , reinicializar e usar várias tabelas de roteamento. Dessa forma, você pode iniciar seu gateway OpenVPN em um FIB separado, como setfib 1 /usr/local/bin ... whatever , e então atribuir o tráfego de seus clientes a ele usando setfib em ipfw ou atribuindo diretamente as interfaces de seus clientes a esse FIB.

    
por 17.10.2016 / 12:52