Mă joc cu nftable și observ un comportament ciudat pe care nu-l pot explica.
Am trei VM-uri, sursă
, router
și destinaţie
. Toate rulează cel mai recent Oracle EL 8.5 și sunt configurate prin nft.
sursă
are o singură interfață de rețea enp0s8
cu IP 10.111.111.1 în subrețea /24.
router
are două interfețe de rețea: enp0s8
cu IP 10.111.111.2 în subrețea /24 și enp0s9
cu IP 10.100.100.2 în subrețea /24.
destinaţie
are o singură interfață de rețea enp0s8
cu IP 10.100.100.1 în subrețea /24.
Scopul meu este să am destinaţie
ascuns de sursă
în spatele NAT, cu IP 10.200.200.1. Ce am facut:
- A fost activată rutarea IP
router
.
- Acces direct blocat de la 10.111.111.0/24 la 10.100.100.0/24 pe
router
.
- Rută statică adăugată 10.200.200.0/24 prin 10.111.111.2 (
router
) pe sursă
.
- NAT configurat activat
router
după cum urmează:
preroutare în lanț {
tip nat hook prerouting priority dstnat; acceptarea politicii;
iifname "enp0s8" ip daddr 10.200.200.1 dnat la 10.100.100.1
}
postrouting în lanț {
tip nat hook postrouting priority srcnat; acceptarea politicii;
ip saddr 10.100.100.1 oifname "enp0s8" snat la 10.200.200.1
}
Totul funcționează conform așteptărilor, destinaţie
este accesibil de la sursă
doar ca 10.200.200.1 și nu ca 10.100.100.1 (sigur, știu că e rău să lucrezi sub root, sunt doar VM-uri experimentale):
[root@source ~]# ping 10.100.100.1
PING 10.100.100.1 (10.100.100.1) 56(84) octeți de date.
^C
--- 10.100.100.1 statistici ping ---
15 pachete transmise, 0 primite, 100% pierdere de pachete, timp 14320 ms
[root@source ~]# ping 10.200.200.1
PING 10.200.200.1 (10.200.200.1) 56(84) octeți de date.
64 de octeți din 10.200.200.1: icmp_seq=1 ttl=63 time=0,554 ms
64 de octeți din 10.200.200.1: icmp_seq=2 ttl=63 time=1,80 ms
64 de octeți de la 10.200.200.1: icmp_seq=3 ttl=63 timp=1,84 ms
^C
--- 10.200.200.1 statistici ping ---
3 pachete transmise, 3 primite, 0% pierdere de pachete, timp 2043 ms
rtt min/avg/max/mdev = 0,554/1,397/1,836/0,598 ms
Dar când fac traceroute sau trimit ping cu TTL=1, răspunsul are IP 10.200.200.1, în loc de router
IP-ul lui 10.111.111.2:
[root@source ~]# traceroute 10.200.200.1
traceroute la 10.200.200.1 (10.200.200.1), maxim 30 de hopuri, pachete de 60 de octeți
1 10.200.200.1 (10.200.200.1) 0,752 ms 0,679 ms 0,984 ms
2 10.200.200.1 (10.200.200.1) 1.181 ms 1.130 ms 1.070 ms
[root@source ~]# ping 10.200.200.1 -c 1 -t 1
PING 10.200.200.1 (10.200.200.1) 56(84) octeți de date.
De la 10.200.200.1 icmp_seq=1 Timp de viață depășit
--- 10.200.200.1 statistici ping ---
1 pachet transmis, 0 primit, +1 erori, 100% pierdere pachet, timp 0 ms
Dacă fac același lucru pentru orice altă adresă din subrețeaua 10.200.200.0/24, răspunsurile au IP-uri corecte:
[root@source ~]# ping 10.200.200.2 -c 1 -t 1
PING 10.200.200.2 (10.200.200.2) 56(84) octeți de date.
De la 10.111.111.2 icmp_seq=1 Timp de viață depășit
--- 10.200.200.2 statistici ping ---
1 pachet transmis, 0 primit, +1 erori, 100% pierdere pachet, timp 0 ms
Poate cineva să clarifice de ce în primul caz ICMP TTL a depășit răspunsul are IP-ul destinației finale, iar în al doilea caz are IP-ul routerului?