No meu cenário, existe uma máquina que atua como um firewall baseado no iptables e um servidor OpenVPN ao mesmo tempo. Ele tem duas interfaces de rede - eth1
está conectado à Internet, enquanto eth0
está conectado à LAN atrás da máquina.
Até agora, eu entendo como configurar o iptables para conexões VPN baseadas em roteamento / TUN . Você pode encontrar a seguinte visualização no openvpn.net:
| FIREWALL |
| |
{eth1 eth0}
| \ / |
| +----------------------+ |
| | iptables and | |
| | routing engine | |
| +--+----------------+--+ |
| | | |
| (openvpn)-------{tun0} |
| 10.8.0.1 |
+--------------------------------+
De acordo com a imagem, o fluxo do pacote lógico é assim:
Internet - > eth1 - > iptables (via cadeia INPUT) - > OpenVPN - > tun0 - > iptables (via cadeia FORWARD) - > eth0 - > LAN
... o que deve resultar nas seguintes regras de iptables se eu não estiver errado:
# allow incoming and outgoing VPN traffic from/to the internet
iptables -A INPUT -i eth1 -p udp --dport 1194 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
# allow traffic between tun0 and LAN
iptables -A FORWARD -i tun+ -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -o tun+ -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Até agora, tudo bem. O que eu quero fazer agora é perceber exatamente o mesmo cenário acima, mas com conexões VPN baseadas em bridge / TAP , mas tenho problemas para entender o fluxo do pacote lógico e criar regras de iptables em um ambiente em ponte.
O que eu ganho até agora:
-
tun0
é substituído por tap0
- Eu preciso de uma interface de ponte entre eth0 e tap0, vamos chamá-lo de
br0
Por uma questão de simplicidade, vamos supor que os dois tap0 e br0 já estejam configurados.
O que eu não entendo é o fluxo de pacotes do ponto de vista do iptables e especialmente como o iptables lida com br0
. Meu objetivo é criar a mesma visualização e as regras acima, mas para o ambiente descrito em ponte / baseado em TAP.
edit: Não preciso criar um ambiente real e pronto para produção, não se preocupe. Eu só quero entender isso:)