OpenBSD pf - implementando o equivalente a um iptables DNAT

2

Versão curta

O servidor A (OpenBSD 4.7) se conecta ao servidor B (Windows). IP do servidor B muda. O servidor A deve ser capaz de se conectar ao servidor B para o antigo e o novo IP. Não podemos configurar vários IPs no servidor B.

Versão longa

Temos um servidor OpenBSD atuando como um ponto de acesso (regras ssh + authpf) onde os clientes externos se conectam e depois abrem uma conexão com um serviço em outro servidor interno. O IP do servidor interno vai mudar.

Para nos dar mais tempo para reconfigurar todos os clientes para usar o novo endereço IP, achei que podemos implementar o equivalente a um DNAT na caixa do OpenBSD. Se esta fosse uma caixa Linux, eu poderia usar a seguinte regra DNAT que me permite conectar out da própria caixa ao serviço remoto no IP real (10.68.32.215) ou no novo IP. / p>

$ sudo iptables -t nat -A OUTPUT -d 10.68.99.99 -j DNAT --to-dest 10.68.32.215
$ ssh-keyscan -t rsa 10.68.32.215
# 10.68.32.215 SSH-2.0-OpenSSH_4.3
10.68.32.215 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAy/GCd47aaRkBOu72v9Ysqk48Ngd6budStvdwnvMOTLiYoz6M81cTq7SskWctXx57cz6Ijnv1sbzcmDpFMUsN5vHk+6NxfrLzO0M1zh7UezY54FakgaavSdCiy15vGw/Lifntp5kMKkjgC5o42O+RUVw5iCpR8nsu/2/kR2smcVR1G3R8EunjCZWEptOCHz3Iup7FTMd4Pw/xmt+8u+5ZyHKu+uaLWQl6I12rzLiQJNyMLVdhba54FGiJDFUfcXtgM7cFli6xlrE3dnbboQE/7/cuj/N11QwTvHuU07NtrubefZE1VahWb146ph31blsW5NSiyFwL2I7rxFFoPQMbuQ==
$ ssh-keyscan -t rsa 10.68.99.99
# 10.68.99.99 SSH-2.0-OpenSSH_4.3
10.68.99.99 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAy/GCd47aaRkBOu72v9Ysqk48Ngd6budStvdwnvMOTLiYoz6M81cTq7SskWctXx57cz6Ijnv1sbzcmDpFMUsN5vHk+6NxfrLzO0M1zh7UezY54FakgaavSdCiy15vGw/Lifntp5kMKkjgC5o42O+RUVw5iCpR8nsu/2/kR2smcVR1G3R8EunjCZWEptOCHz3Iup7FTMd4Pw/xmt+8u+5ZyHKu+uaLWQl6I12rzLiQJNyMLVdhba54FGiJDFUfcXtgM7cFli6xlrE3dnbboQE/7/cuj/N11QwTvHuU07NtrubefZE1VahWb146ph31blsW5NSiyFwL2I7rxFFoPQMbuQ==

Nossa versão do OpenBSD é 4.7, mas podemos atualizar, se necessário. Se essa DNAT não for possível, provavelmente poderemos fazer um NAT em um firewall ao longo do caminho.

O mais próximo que consegui realizar em uma caixa de teste é:

pass out on em1 inet proto icmp from any to 10.68.31.99 nat-to 10.68.31.247

Infelizmente, pfctl -s state me diz que nat-to traduz o IP source , enquanto eu preciso traduzir o destino.

$ sudo pfctl -s state
all icmp 10.68.31.247:7263 (10.68.30.199:13437) -> 10.68.31.99:8       0:0

Também encontrei muitas menções sobre regras que começam com rdr e incluem o símbolo -> para expressar a tradução, mas parece com essa sintaxe ficou obsoleto em 4.7 e não consigo nada semelhante ao trabalho. As tentativas de implementar uma regra de redirecionamento de nova sintaxe falham com:

$ echo match out on em1 to 10.68.31.99 rdr-to 10.68.31.247 | sudo pfctl -f -
stdin:1: rdr-to can only be used inbound

É claro que, como estou tentando redirecionar o tráfego de saída , modificar a regra acima para "transmitir" também não funciona.

Status atual

Acabou de aplicar um NAT em um firewall entre os dois servidores. Fiz o truque, embora de interesse acadêmico, ainda estou curioso para saber se isso é possível no OpenBSD.

    
por chutz 20.06.2012 / 05:13

1 resposta

1

Eu não tenho certeza se é isso que você quer, mas eu uso algo assim para redirecionar o tráfego para outro IP.

rdr pass on $ext_if proto icmp from any to $OLD_IP -> $NEW_IP

A sintaxe não é testada, mas pode funcionar

Algo semelhante funciona no FreeBSD

Editar

Após dar uma olhada nas manpages do OpenBSD, esta sintaxe pode funcionar:

pass in on $ext_if proto icmp from any to $OLD_IP rdr-to $NEW_IP
    
por 20.06.2012 / 15:39

Tags