nat nftables debian testing Le sujet est résolu

Demande d'aide : c'est ici.
Répondre
Avatar de l’utilisateur
CTparental
Membre
Membre
Messages : 38
Inscription : 14 sept. 2016, 21:29
Contact :
Status : Hors-ligne

Bonjour,
je n'arrive pas a utiliser correctement nftables sous debian testing , en effet je tente de rediriger toute requêtes dns émise par mon poste vers un serveur dnsmasq écoutent sur le port 54 , les commendes ne retourne aucune erreurs mais la redirection n'est pas effective.
ci dessous le script que je lance.

Code : Tout sélectionner

#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
rmmod ip_tables
modprobe nf_tables
modprobe nf_socket_ipv4
modprobe nft_nat
modprobe nft_chain_nat_ipv4
modprobe nft_chain_nat_ipv6
modprobe nft_fib_ipv4
modprobe nft_objref
modprobe nft_chain_route_ipv4
modprobe nft_fib_ipv6
modprobe nft_queue
modprobe nft_chain_route_ipv6
modprobe nft_fib_netdev
modprobe nft_quota
modprobe nft_compat
modprobe nft_fwd_netdev
modprobe nft_redir
modprobe nft_counter
modprobe nft_hash
modprobe nft_redir_ipv4
modprobe nft_ct
modprobe nft_limit
modprobe nft_redir_ipv6
modprobe nft_dup_ipv4
modprobe nft_log
modprobe nft_reject
modprobe nft_dup_ipv6
modprobe nft_masq
modprobe nft_reject_bridge
modprobe nft_dup_netdev
modprobe nft_masq_ipv4
modprobe nft_reject_inet
modprobe nft_fib
modprobe nft_masq_ipv6
modprobe nft_reject_ipv4
modprobe nft_fib_inet
modprobe nft_numgen
modprobe nft_reject_ipv6

nft flush ruleset
nft add table NAT
nft add chain NAT postrouting \{ type nat hook postrouting priority 100 \; \}
nft add chain NAT prerouting \{ type nat hook prerouting priority 0 \; \}
nft add rule NAT prerouting udp dport 53 dnat 127.0.0.1:54
nft add rule NAT prerouting tcp dport 53 dnat 127.0.0.1:54
#nft add rule NAT prerouting tcp dport 53 redirect to 54
#nft add rule NAT prerouting udp dport 53 redirect to 54
nft list table NAT
voici ce que cela me retourne:
rmmod: ERROR: Module ip_tables is not currently loaded
table ip NAT {
chain postrouting {
type nat hook postrouting priority 100; policy accept;
}

chain prerouting {
type nat hook prerouting priority 0; policy accept;
udp dport domain dnat to 127.0.0.1:54
tcp dport domain dnat to 127.0.0.1:54
}
}
auriez vous des idées a me soumettre .
AMD A6-6400K
Radeon HD 7750/8740 / R7 250E 1GDDR5
8G ram DDR3
Debian Sid Xfce lightdm
PascalHambourg
Contributeur
Contributeur
Messages : 930
Inscription : 05 août 2016, 20:25
Status : Hors-ligne

Le serveur dnsmasq et les règles nftables sont sur la machine qui émet les requêtes DNS ?
Dans ce cas il faut mettre les règles dans postrouting pour qu'elles s'appliquent aux paquets sortants.
Avatar de l’utilisateur
CTparental
Membre
Membre
Messages : 38
Inscription : 14 sept. 2016, 21:29
Contact :
Status : Hors-ligne

PascalHambourg a écrit : 07 nov. 2018, 21:48 Le serveur dnsmasq et les règles nftables sont sur la machine qui émet les requêtes DNS ?
Dans ce cas il faut mettre les règles dans postrouting pour qu'elles s'appliquent aux paquets sortants.
oui tous en local sur le même poste , je vais tester sa je ferai un retour.
merci j'avais pas pensé a sa.

bon j'ai fait le test via postrouting malheureusement pas de dnat possible en postrouting, j'ai aussi tester le dnat via la output mais sans plus de succès c'est étrange car avec iptables sous debian 9

Code : Tout sélectionner

iptables -t nat -N matablenat
iptables -t nat -A matablenat -m owner --uid-owner "utilisateur1" -p tcp --dport 53 -j DNAT --to 127.0.0.1:54
fonctioner très bien même en local avec tous sur la me machine.
je croix que je vais encore attendre avant de passer, a nftable , car j'ai l'impression que certaine fonctionnalité ne sont pas encore au point.
AMD A6-6400K
Radeon HD 7750/8740 / R7 250E 1GDDR5
8G ram DDR3
Debian Sid Xfce lightdm
Avatar de l’utilisateur
CTparental
Membre
Membre
Messages : 38
Inscription : 14 sept. 2016, 21:29
Contact :
Status : Hors-ligne

avec ce code j'ai un peut de changement , un dig en root fonctionne bien sans redirection, un dig avec l'user id 1000 n'arrive pas a trouver le serveur dns, la redirection semble donc être faite mais pas correctement .

Code : Tout sélectionner

#!/bin/bash
.....
nft flush  ruleset
nft add table ip nat
nft add chain nat pre  \{ type nat hook prerouting  priority 0 \; \}
nft add chain nat forw  \{ type filter hook forward priority 0 \; \}
nft add chain nat out  \{ type nat hook output priority 0 \; \}
nft add chain nat post \{ type nat hook postrouting priority 100 \; \}
nft add rule nat out udp dport 53 skuid 1000 dnat :54
nft add rule nat out tcp dport 53 skuid 1000 dnat :54
nft list table nat
avec un le code ci dessous aucune redirection n'est effectuer , même mauvaise .

Code : Tout sélectionner

nft add rule nat out udp dport 53 skuid 1000 dnat 127.0.0.1:54
nft add rule nat out tcp dport 53 skuid 1000 dnat 127.0.0.1:54
je suppose qu'il manque un module ou une option dans le noyau debian buster.
AMD A6-6400K
Radeon HD 7750/8740 / R7 250E 1GDDR5
8G ram DDR3
Debian Sid Xfce lightdm
Avatar de l’utilisateur
CTparental
Membre
Membre
Messages : 38
Inscription : 14 sept. 2016, 21:29
Contact :
Status : Hors-ligne

bon sa fonctionne parfaitement avec ce scripte, encore merci pour m'avoir mis sur la voie.

Code : Tout sélectionner

#!/bin/bash
sysctl -w net.ipv4.conf.all.route_localnet=0
sysctl -w net.ipv4.ip_forward=1
rmmod ip_tables
modprobe nf_tables
modprobe nf_tables_set
modprobe nft_chain_nat_ipv6
modprobe nft_chain_nat_ipv4
modprobe nft_chain_route_ipv6
modprobe nft_chain_route_ipv4
modprobe nft_counter
modprobe nft_ct
modprobe nft_exthdr
modprobe nft_hash
modprobe nft_limit
modprobe nft_log
modprobe nft_masq
modprobe nft_meta
modprobe nft_nat
modprobe nft_queue
modprobe nft_rbtree
modprobe nft_redir
modprobe nft_reject_inet
modprobe nft_reject
modprobe nft_reject_ipv4
modprobe nft_reject_ipv6
modprobe nft_compat
modprobe nft_fib_inet
modprobe nft_redir_ipv6
modprobe nft_dup_ipv4
modprobe nft_fib_ipv4
modprobe nft_masq_ipv6
modprobe nft_reject_bridge
modprobe nft_dup_ipv6
modprobe nft_fib_ipv6
modprobe nft_numgen
modprobe nft_dup_netdev
modprobe nft_fib_netdev
modprobe nft_objref
modprobe nft_fib
modprobe nft_fwd_netdev
modprobe nft_quota

nft flush  ruleset

## je passe par un fichier pour pouvoir mètre les priorisées négatives car si non l'erreur nft: invalid option -- '1' ce produit
## plus d’explication ici https://www.linuxquestions.org/questions/linux-security-4/nftables-add-table-and-chains-4175526661/
## https://wiki.nftables.org/wiki-nftables/index.php/Configuring_chains => Base chain priority => NF_IP_PRI_NAT_DST (-100): destination NAT
echo 'table ip natct {
chain pre { type nat hook prerouting  priority -100 ; }
chain out { type nat hook output priority -100 ; }
chain post { type nat hook postrouting priority 100 ; }
}' > /tmp/natct.nft
nft -f /tmp/natct.nft
rm -f /tmp/natct.nft

nft add rule natct out udp dport 53 skuid 1000 dnat 127.0.0.1:54
nft add rule natct out tcp dport 53 skuid 1000 dnat 127.0.0.1:54
nft list table natct
AMD A6-6400K
Radeon HD 7750/8740 / R7 250E 1GDDR5
8G ram DDR3
Debian Sid Xfce lightdm
Répondre