Eu acredito que você precisa:
iptables -t nat -A POSTROUTING -d 192.168.18.1 -j SNAT --to <some_ip_here>
onde é o endereço IP da interface linuxserver conectada à mesma rede que o destino. Eu acho que provavelmente será 192.168.18.
Eu tenho o seguinte design:
client linuxserver destination
192.168.160.34 192.168.163.196 192.168.18.1
Eu posso pingar o servidor do cliente e cliente do servidor, eles estão na mesma sub-rede, 192.168.160/22
, eu também posso pingar o destino do servidor
lista de roteamento IP dos clientes:
default via 192.168.163.196 dev ens192
192.168.160.0/22 dev ens192 proto kernel scope link src 192.168.160.34
A política do iptables do cliente é aceita em todas as cadeias e já liberada.
O iptables do servidor é aceito em todas as cadeias, tem algumas regras docker + kvm
e etc.
Eu prossigo para adicionar o seguinte no servidor:
iptables -t nat -A POSTROUTING -s 192.168.160.34 -j SNAT --to 192.168.163.196
Também adicionei net.ipv4.ip_forward=1
e apliquei-o aos parâmetros do kernel.
Eu ainda não consigo pingar o destino do cliente.
tcpdump:
00:00:00.000000 IP (tos 0x0, ttl 64, id 3182, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.160.34 > 192.168.18.1: ICMP echo request, id 4442, seq 1, length 64
00:00:00.000052 IP (tos 0x0, ttl 63, id 3182, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.163.196 > 192.168.18.1: ICMP echo request, id 4442, seq 1, length 64
00:00:00.000680 IP (tos 0x0, ttl 125, id 32481, offset 0, flags [none], proto ICMP (1), length 84)
192.168.18.1 > 192.168.163.196: ICMP echo reply, id 4442, seq 1, length 64
00:00:01.028150 IP (tos 0x0, ttl 64, id 3405, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.160.34 > 192.168.18.1: ICMP echo request, id 4442, seq 2, length 64
00:00:00.000042 IP (tos 0x0, ttl 63, id 3405, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.163.196 > 192.168.18.1: ICMP echo request, id 4442, seq 2, length 64
00:00:00.000489 IP (tos 0x0, ttl 125, id 32749, offset 0, flags [none], proto ICMP (1), length 84)
192.168.18.1 > 192.168.163.196: ICMP echo reply, id 4442, seq 2, length 64
00:00:01.023522 IP (tos 0x0, ttl 64, id 3641, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.160.34 > 192.168.18.1: ICMP echo request, id 4442, seq 3, length 64
Meus pacotes icmp chegam ao destino e voltam ao servidor linux, mas não conseguem acessar o cliente. Qualquer ajuda seria apreciada.
Coisas que tentei:
Teste a regra nat em uma caixa limpa instalada, com as mesmas informações, e funcionou (apenas alterou o gateway padrão no cliente para este teste para o novo servidor)
Liberando todas as correntes no servidor linux, adicione a regra novamente e tente novamente (não ajuda)
adicione os seguintes parâmetros do kernel no servidor linux (não ajuda):
net.ipv4.conf.all.send_redirects = 1
net.ipv4.conf.all.accept_source_route = 1
Eu acredito que você precisa:
iptables -t nat -A POSTROUTING -d 192.168.18.1 -j SNAT --to <some_ip_here>
onde é o endereço IP da interface linuxserver conectada à mesma rede que o destino. Eu acho que provavelmente será 192.168.18.
Tags networking iptables nat linux