「Policy Drop」ではポート転送は機能しません。

「Policy Drop」ではポート転送は機能しません。

Raspberry Pi 4を使用してポート転送プロキシを設定しようとしています。NFテーブル。安価な家庭用NATルータの簡単なポート転送機能を複製したいと思います。これは私が開発している大規模なリモート管理アプリケーションのコンポーネントです。

これを使用してホスト自体のポートをリダイレクトできますredirect。しかし、ホストの外部に何も渡すことはできません。

ルーティングを有効にしました。しかし、LAN内でも動作したいです。私はそれが要因だとは思わない。

見てjournalctl、私のルールが実行されているようです。ただし、ブラウザはページを表示しません。

  • ポート 80 が 8088 でローカルで実行される Web アプリケーションにリダイレクトされています。これはうまくいきます。
  • ポート81はプリンタの管理画面に転送する必要があります。
  • ポート82が外部のWebサイトに配信しようとしています。
$ curl -i http://192.168.10.32:81
^C (no response)
$

ログと構成は次のとおりです。

アップデート:デバイスがもともとWireGuardも実行していたという事実については言及していません。簡単にするために、WireGuardを無効にし、設定とログを再リストしました。今これは非常に一般的な構成です。

# 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
    }
}

  • 80を8088作品にリダイレクト
  • プリンタとネットワークへの転送が機能しない
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

ただし、転送が無効になっているため、現在の設定は機能しません。

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

なぜならフィルタフックフォワードタイプチェーンは次のように設定されますpolicy drop

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

一部のシステムが誤ってすべてを転送するのではなく、RPi4をゲートウェイに設定した場合は、転送を制限したい場合(上記のポリシーをからに変更するか、drop完全にaccept削除してください)今後チェーン)を経たものだけを渡すことを選択できます。DNA翻訳する:

nft add rule inet filter forward ct status dnat accept

この情報は、生成された一意のconntrackルックアップエントリに格納されるため(そして双方向および各パケットに使用される)、フロー内のすべてのパケットに十分です。

おすすめ記事