web-dev-qa-db-fra.com

NFTABLES - Comment configurer une adresse IP simple et des ports?

J'essaie de mettre en place un proxy de transfert de port à l'aide d'une framboise PI 4 avec NFTABLES. Je souhaite dupliquer les capacités de transfert de port simples d'un routeur Nat à domicile bon marché. C'est un composant d'une application d'administration distante plus grande que je travaille.

Je peux l'obtenir pour rediriger les ports sur l'hôte lui-même en utilisant redirect. Mais je ne peux pas l'obtenir d'avancer quoi que ce soit au-delà de l'hôte.

J'ai un routage activé. Mais j'aimerais aussi que cela travaillait de l'intérieur du réseau local. Je ne pense pas que ce soit un facteur.

En regardant journalctl, il semble que ma règle soit déclenchée. Mais le navigateur ne soulève jamais la page.

  • le port 80 redirige vers une application Web exécutée localement sur 8088 et ces travaux
  • le port 81 est censé transmettre à l'écran d'administration sur une imprimante
  • le port 82 tente de transmettre à un site Web externe
$ curl -i http://192.168.10.32:81
^C (no response)
$

Le journal et la configuration sont ci-dessous.

MISE À JOUR: Je n'ai pas mentionné que l'appareil était initialement exécuté. Pour simplifier, j'ai désactivé WireGuard et remisté à la configuration et aux journaux. C'est donc une jolie configuration vanille maintenant.

# nft list ruleset
table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        ct state established,related accept
        ct state invalid drop
        iifname "lo" accept
        ip protocol icmp accept
        tcp dport { ssh, 22222 } ct state new log prefix "[nftables] New SSH Accepted: " accept
        tcp dport { http, https, 81, 82, omniorb } accept
        pkttype { Host, broadcast, multicast } drop
        log prefix "[nftables] Input Denied: " flags all counter packets 0 bytes 0 drop
    }

    chain forward {
        type filter hook forward priority 0; policy drop;
    }

    chain output {
        type filter hook output priority 0; policy accept;
    }
}
table ip nat {
    chain postrouting {
        type nat hook postrouting priority 100; policy accept;
        masquerade
    }

    chain prerouting {
        type nat hook prerouting priority -100; policy accept;
        tcp dport http log prefix "redirect to 8088 " redirect to :omniorb
        tcp dport 81 log prefix "pre redirect to printer " level debug dnat to 192.168.10.10:http
        tcp dport 82 log prefix "redirect to web " dnat to 104.21.192.38:http
    }
}

  • rediriger 80 à 8088 œuvres
  • transmettre à l'imprimante et au Web ne fonctionnent pas
Apr 17 13:59:48 douglas kernel: redirect to 8088 IN=eth0 OUT= MAC=dc:a6:32:ab:9c:76:f4:6d:04:63:aa:7d:08:00 SRC=192.168.10.20 DST=192.168.10.32 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=20702 DF PROTO=TCP SPT=44984 DPT=80 WINDOW=64240 RES=0x00 SYN URGP=0 
Apr 17 14:00:50 douglas kernel: pre redirect to printer IN=eth0 OUT= MAC=dc:a6:32:ab:9c:76:f4:6d:04:63:aa:7d:08:00 SRC=192.168.10.20 DST=192.168.10.32 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=2569 DF PROTO=TCP SPT=34024 DPT=81 WINDOW=64240 RES=0x00 SYN URGP=0 
Apr 17 14:00:51 douglas kernel: pre redirect to printer IN=eth0 OUT= MAC=dc:a6:32:ab:9c:76:f4:6d:04:63:aa:7d:08:00 SRC=192.168.10.20 DST=192.168.10.32 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=2570 DF PROTO=TCP SPT=34024 DPT=81 WINDOW=64240 RES=0x00 SYN URGP=0 
Apr 17 14:00:53 douglas kernel: pre redirect to printer IN=eth0 OUT= MAC=dc:a6:32:ab:9c:76:f4:6d:04:63:aa:7d:08:00 SRC=192.168.10.20 DST=192.168.10.32 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=2571 DF PROTO=TCP SPT=34024 DPT=81 WINDOW=64240 RES=0x00 SYN URGP=0 
Apr 17 14:00:59 douglas kernel: redirect to web IN=eth0 OUT= MAC=dc:a6:32:ab:9c:76:f4:6d:04:63:aa:7d:08:00 SRC=192.168.10.20 DST=192.168.10.32 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=36328 DF PROTO=TCP SPT=44326 DPT=82 WINDOW=64240 RES=0x00 SYN URGP=0 
Apr 17 14:01:00 douglas kernel: redirect to web IN=eth0 OUT= MAC=dc:a6:32:ab:9c:76:f4:6d:04:63:aa:7d:08:00 SRC=192.168.10.20 DST=192.168.10.32 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=36329 DF PROTO=TCP SPT=44326 DPT=82 WINDOW=64240 RES=0x00 SYN URGP=0 
Apr 17 14:01:02 douglas kernel: redirect to web IN=eth0 OUT= MAC=dc:a6:32:ab:9c:76:f4:6d:04:63:aa:7d:08:00 SRC=192.168.10.20 DST=192.168.10.32 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=36330 DF PROTO=TCP SPT=44326 DPT=82 WINDOW=64240 RES=0x00 SYN URGP=0 
Apr 17 14:01:06 douglas kernel: redirect to web IN=eth0 OUT= MAC=dc:a6:32:ab:9c:76:f4:6d:04:63:aa:7d:08:00 SRC=192.168.10.20 DST=192.168.10.32 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=36331 DF PROTO=TCP SPT=44326 DPT=82 WINDOW=64240 RES=0x00 SYN URGP=0 
# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope Host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope Host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether dc:a6:32:ab:9c:76 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.32/24 brd 192.168.10.255 scope global dynamic noprefixroute eth0
       valid_lft 603659sec preferred_lft 528059sec
    inet6 fe80::2cd9:f195:bfe6:38e8/64 scope link 
       valid_lft forever preferred_lft forever
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether dc:a6:32:ab:9c:77 brd ff:ff:ff:ff:ff:ff
# ip route
default via 192.168.10.1 dev eth0 proto dhcp src 192.168.10.32 metric 202 
192.168.10.0/24 dev eth0 proto dhcp scope link src 192.168.10.32 metric 202
#  sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
1
PrecisionPete

Votre configuration actuelle ne fonctionne pas simplement parce que le transfert est désactivé, malgré:

#  sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

en raison de type filtre de filtre en avant chaîne définie sur policy drop:

    chain forward {
        type filter hook forward priority 0; policy drop;
    }

Si vous souhaitez limiter le transfert, dans le cas où certains systèmes définissent à tort le RPI4 à titre de passerelle, plutôt que de tout renvoyer (en évoluant la stratégie au-dessus de drop à accept ou en supprimant complètement le - avant chaîne), vous pouvez choisir d'envoyer uniquement des paquets qui ont subi une traduction :DNAT:

nft add rule inet filter forward ct status dnat accept

Cela suffit pour tous les paquets du flux, car ces informations sont stockées dans l'unique entrée de recherche Conntrack créée (et est utilisée pour les directions et tous les paquets).

3
A.B