Que es NDP Proxy Daemon
Un NDP Proxy es un programa que escucha las Neighbor Solicitation (ICMPv6 tipo 135) en la interfaz WAN, esto se usa cuando tu ISP no da un prefijo mayor a /64 o te dio un /60 y se te acabo, en mi caso solo me dio un /64.
para poder crear otra subnet es necesario otro /64 como se puede observar en la tabla.
IPv6 Subnet Table
Prefix | Subnet Example | Total IP Addresses | # of /64 nets |
---|---|---|---|
4 | x:: | 2^124 | 2^60 |
8 | xx:: | 2^120 | 2^56 |
12 | xxx:: | 2^116 | 2^52 |
16 | xxxx:: | 2^112 | 2^48 |
20 | xxxx:x:: | 2^108 | 2^44 |
24 | xxxx:xx:: | 2^104 | 2^40 |
28 | xxxx:xxx:: | 2^100 | 2^36 |
32 | xxxx:xxxx:: | 2^96 | ########## |
36 | xxxx:xxxx:x:: | 2^92 | 268,435,456 |
40 | xxxx:xxxx:xx:: | 2^88 | 16,777,216 |
44 | xxxx:xxxx:xxx:: | 2^84 | 1,048,576 |
48 | xxxx:xxxx:xxxx:: | 2^80 | 65,536 |
52 | xxxx:xxxx:xxxx:x:: | 2^76 | 4,096 |
56 | xxxx:xxxx:xxxx:xx:: | 2^72 | 256 |
60 | xxxx:xxxx:xxxx:xxx:: | 2^68 | 16 |
64 | xxxx:xxxx:xxxx:xxxx:: | 2^64 (18,446,744,073,709,551,616) | 1 |
68 | xxxx:xxxx:xxxx:xxxx:x:: | 2^60 (1,152,921,504,606,846,976) | 0 |
72 | xxxx:xxxx:xxxx:xxxx:xx:: | 2^56 (72,057,594,037,927,936) | 0 |
76 | xxxx:xxxx:xxxx:xxxx:xxx:: | 2^52 (4,503,599,627,370,496) | 0 |
80 | xxxx:xxxx:xxxx:xxxx:xxxx:: | 2^48 (281,474,976,710,656) | 0 |
84 | xxxx:xxxx:xxxx:xxxx:xxxx:x:: | 2^44 (17,592,186,044,416) | 0 |
88 | xxxx:xxxx:xxxx:xxxx:xxxx:xx:: | 2^40 (1,099,511,627,776) | 0 |
92 | xxxx:xxxx:xxxx:xxxx:xxxx:xxx:: | 2^36 (68,719,476,736) | 0 |
96 | xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:: | 2^32 (4,294,967,296) | 0 |
100 | xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:x:: | 2^28 (268,435,456) | 0 |
104 | xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xx:: | 2^24 (16,777,216) | 0 |
108 | xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxx:: | 2^20 (1,048,576) | 0 |
112 | xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:: | 2^16 (65,536) | 0 |
116 | xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:x:: | 2^12 (4,096) | 0 |
120 | xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xx:: | 2^8 (256) | 0 |
124 | xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxx:: | 2^4 (16) | 0 |
128 | xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx | 2^0 (1) | 0 |
En algunas ocasiones, es indispensable entender c贸mo funciona para diagnosticar errores.
NDP Proxy de forma manual
para realizar de forma manual, primero tenemos que asignarle una ipv6 a uno de nuestros clientes, en mi caso cada cliente recibe la ip mediante SLAAC (Stateless Address Auto-Configuration).
para esto primero se tiene que hacer una traducci贸n de direcci贸n, como se puede observar la ip fd78:e9fa:9f28:0:9c0d:dea4:8e6f:7b66 es de tipo ULA (Unique Local Address), esto se hace con ip6tables mediante NETMAP.
NETMAP
This target allows you to statically map a whole network of addresses onto another network of addresses.
It can only be used from rules in the nat table.--to address[/mask]
Network address to map to. The resulting address will be constructed in the following way:
All ‘one’ bits in the mask are filled in from the newaddress
.
All bits that are zero in the mask are filled in from the original address.
IPv6 support available since Linux kernels >= 3.7.
implementacion de NETMAP con IPTABLES
Para implementar NETMAP con ip6tables, debemos conocer el prefijo delegado por el ISP y el prefijo ULA que utilizamos para la traducci贸n. El comando con ip6tables queda de la siguiente forma:
sudo ip6tables -t nat -I POSTROUTING -s fd78:e9fa:9f28::/64 -o eth0 -j NETMAP --to 2806:103e:15:6663::/64
sudo ip6tables -t nat -I PREROUTING -i eth0 -d 2806:103e:15:6663::/64 -j NETMAP --to fd78:e9fa:9f28::/64
una vez realizada la traducci贸n de prefijo los paquetes se ven de la siguiente forma.
ahora se necesita realizar el proxy de Neighbor Solicitation esto se usa para “Un nodo env铆a un mensaje NS para solicitar la direcci贸n MAC (la direcci贸n f铆sica) de un nodo vecino cuya direcci贸n IPv6 conoce”, el proxy hace que el router en el que estamos implementado ndppd proxy responda con un Neighbor Advertisement (NA), entonces primero se envia Neighbor Solicitation despu茅s el cliente debe responder con Neighbor Advertisement para posteriormente almacenarse en una tabla de Neighbor Cache Table.
Para lograr esto en el router, a帽adimos lo siguiente:
sudo ip -6 neigh add proxy 2806:103e:15:6663:9c0d:dea4:8e6f:7b66 dev eth0
# En sysctl hablilitamos proxy_ndp
sysctl -w net.ipv6.conf.all.proxy_ndp=1
sysctl -w net.ipv6.conf.eth0.proxy_ndp=1
Como se puede observar, ya se realiza la traducci贸n y se responden los paquetes.
Con neigh show se puede ver los proxy activos
ip -6 neigh show proxy dev eth0
Instalacion de ndppd
sudo apt-get install ndppd
la configuraci贸n se encuentra en nano /etc/ndppd.conf insertamos esto para una configuraci贸n b谩sica, en el caso de rule es el prefijo que nos da el ISP
route-ttl 30000
proxy eth0 {
router yes
timeout 500
ttl 30000
promiscuous yes
rule 2806:103e:15:6663::/64 {
static
}
}
Con esto, la configuraci贸n estar铆a completa. Para hacer debug se usa:
ndppd -vvv