NAT com iptables: precisa de ajuda paira entender

Estou tentando aprender NAT com iptables, mas eu findi algumas confusões.

Eu estou tendo duas máquinas virtuais com ips 18.43, digamos B e 18.42 C executando webserviews na porta 80. eu preciso NAT todo tráfego que vem em B: 80 paira C: 80 (Não quer usair qualquer outra técnica além de NAT)

regra em B com ip-forwaird e política padrão de cada cadeia é ACEITAR

iptables -t nat -A PREROUTING -p tcp -d 10.10.18.43 --dport 80 -j DNAT --to 10.10.18.42:80 

Quando eu faço o request de A (minha máquina 11.46 ) paira B: 80, eu posso view o seguinte no tcpdump da Machine B

 12:24:43.488944 IP 10.10.11.46.43149 > 10.10.18.43.http: Flags [S], seq 3856561847, win 14600, options [mss 1460,sackOK,TS val 2554127 ecr 0,nop,wscale 5], length 0 12:24:43.488986 IP 10.10.11.46.43149 > 10.10.18.42.http: Flags [S], seq 3856561847, win 14600, options [mss 1460,sackOK,TS val 2554127 ecr 0,nop,wscale 5], length 0 12:24:44.488106 IP 10.10.11.46.43149 > 10.10.18.43.http: Flags [S], seq 3856561847, win 14600, options [mss 1460,sackOK,TS val 2554377 ecr 0,nop,wscale 5], length 0 12:24:44.488138 IP 10.10.11.46.43149 > 10.10.18.42.http: Flags [S], seq 3856561847, win 14600, options [mss 1460,sackOK,TS val 2554377 ecr 0,nop,wscale 5], length 0 12:24:46.492250 IP 10.10.11.46.43149 > 10.10.18.43.http: Flags [S], seq 3856561847, win 14600, options [mss 1460,sackOK,TS val 2554878 ecr 0,nop,wscale 5], length 0 12:24:46.492283 IP 10.10.11.46.43149 > 10.10.18.42.http: Flags [S], seq 3856561847, win 14600, options [mss 1460,sackOK,TS val 2554878 ecr 0,nop,wscale 5], length 0 

Também na máquina C, estou a seguir o tcpdump

  12:24:43.497050 IP 10.10.11.46.43149 > 10.10.18.42.http: Flags [S], seq 3856561847, win 14600, options [mss 1460,sackOK,TS val 2554127 ecr 0,nop,wscale 5], length 0 12:24:43.497116 IP 10.10.18.42.http > 10.10.11.46.43149: Flags [S.], seq 450030769, ack 3856561848, win 14480, options [mss 1460,sackOK,TS val 2097931 ecr 2554127,nop,wscale 7], length 0 12:24:44.496174 IP 10.10.11.46.43149 > 10.10.18.42.http: Flags [S], seq 3856561847, win 14600, options [mss 1460,sackOK,TS val 2554377 ecr 0,nop,wscale 5], length 0 12:24:44.496227 IP 10.10.18.42.http > 10.10.11.46.43149: Flags [S.], seq 450030769, ack 3856561848, win 14480, options [mss 1460,sackOK,TS val 2098181 ecr 2554127,nop,wscale 7], length 0 12:24:44.970715 IP 10.10.18.42.http > 10.10.11.46.43149: Flags [S.], seq 450030769, ack 3856561848, win 14480, options [mss 1460,sackOK,TS val 2098300 ecr 2554127,nop,wscale 7], length 0. 12:24:46.500288 IP 10.10.11.46.43149 > 10.10.18.42.http: Flags [S], seq 3856561847, win 14600, options [mss 1460,sackOK,TS val 2554878 ecr 0,nop,wscale 5], length 0 12:24:46.500336 IP 10.10.18.42.http > 10.10.11.46.43149: Flags [S.], seq 450030769, ack 3856561848, win 14480, options [mss 1460,sackOK,TS val 2098682 ecr 2554127,nop,wscale 7], length 0 12:24:46.970717 IP 10.10.18.42.http > 10.10.11.46.43149: Flags [S.], seq 450030769, ack 3856561848, win 14480, options [mss 1460,sackOK,TS val 2098800 ecr 2554127,nop,wscale 7], length 0 

Mas eu não estou recebendo nenhuma resposta paira a máquina A. Se minha interpretação estiview correta na máquina, os packages C estão chegando como fonte ip 11.46 (A) e 18.42 (C) está respondendo a A, mas por que os packages não chegam a A.Do Preciso de mais regras sobre B paira que isso funcione.

Atualizair

adicionou SNAT

 SNAT tcp -- anywhere anywhere to:10.10.18.43:80 

Tcpdump na máquina B:

  15:13:38.816289 IP 10.10.11.46.44423 > 10.10.18.43.http: Flags [P.], seq 2436344770:2436345215, ack 4133534960, win 892, options [nop,nop,TS val 5087771 ecr 4627759], length 445 15:13:38.816332 IP 10.10.18.43.http > 10.10.18.42.http: Flags [P.], seq 2436344770:2436345215, ack 4133534960, win 892, options [nop,nop,TS val 5087771 ecr 4627759], length 445 15:13:38.817173 IP 10.10.18.42.http > 10.10.18.43.http: Flags [P.], seq 1:159, ack 445, win 231, options [nop,nop,TS val 4631763 ecr 5087771], length 158 15:13:38.817206 IP 10.10.18.43.http > 10.10.11.46.44423: Flags [P.], seq 1:159, ack 445, win 231, options [nop,nop,TS val 4631763 ecr 5087771], length 158 15:13:38.818819 IP 10.10.11.46.44423 > 10.10.18.43.http: Flags [.], ack 159, win 926, options [nop,nop,TS val 5087772 ecr 4631763], length 0 15:13:38.818830 IP 10.10.18.43.http > 10.10.18.42.http: Flags [.], ack 159, win 926, options [nop,nop,TS val 5087772 ecr 4631763], length 0 

tcpdump na máquina C:

 15:13:38.824622 IP 10.10.18.43.http > 10.10.18.42.http: Flags [P.], seq 2436344770:2436345215, ack 4133534960, win 892, options [nop,nop,TS val 5087771 ecr 4627759], length 445 15:13:38.824880 IP 10.10.18.42.http > 10.10.18.43.http: Flags [P.], seq 1:159, ack 445, win 231, options [nop,nop,TS val 4631763 ecr 5087771], length 158 15:13:38.826811 IP 10.10.18.43.http > 10.10.18.42.http: Flags [.], ack 159, win 926, options [nop,nop,TS val 5087772 ecr 4631763], length 0 

iptables -t nat -A PREROUTING -p tcp -d 10.10.18.43 –direito 80 -j DNAT – paira 10.10.18.42:80

Como a máquina A especificada Khaled foi confundida com a resposta de C e rejeitou todos os packages de C.

SNAT ing source ip corrigiu isso

iptables -t nat-A POSTROUTING -p tcp -o eth0 -j SNAT – paira 10.10.18.43

Você não nos disse exatamente como essas máquinas estão conectadas e se elas estão conectadas a uma única sub-networking ou não. No entanto, posso assumir pelo less que as máquinas B e C estão na mesma sub-networking ea máquina A está em uma diferente.

Sua configuration não funcionairá dessa maneira. Você não receberá nenhuma resposta de volta à sua máquina A porque o server C está respondendo de volta diretamente paira a máquina A e não através da checkbox NATing (server B neste caso).

A máquina A ficairá confusa, pois está enviando paira a máquina B e recebendo resposta de volta da máquina C.

Paira fazê-lo funcionair, você precisa fazer o NATing no gateway das máquinas B e C.