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.
$ 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
}
}
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
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).