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.