LoginSignup
1
0

More than 1 year has passed since last update.

NPF(NetBSD Packet Filter)でNATとポートフォワーディング設定を行ってみる

Last updated at Posted at 2022-12-09

NetBSD Advent Calendar 2022 9日目の記事です。 今日はNPF(NetBSD Packet Filter)でNAT(Network Address Translation)設定とポートフォワーディングを行う設定手順を紹介しようと思います。

NPFでのNAT設定

NPFに限らず、FreeBSDのipf(5)やLinuxで使用されているiptablesといったファイアウォール実装には、グローバルIPアドレスをローカルネットワーク内の複数のノードから利用可能にするNAT(Network Address Translation)機能が実装されています。

NPFでのNAT設定は以下のように行います。インタフェース名やネットワークの値を変数に入れているため複数行になっていますが、重要なのは map の記述の部分になります。

$ext_if = "wm1"
$ext_v4 = inet4($ext_if)

$localnet = { 172.16.0.0/24 }

# NAT変換を行うための設定
map $ext_if dynamic $localnet -> $ext_v4

ちなみにFreeBSDではipnat(5)を利用し、 /etc/ipnat.conf にNAT変換ルールを記述します。併せて /etc/rc.confipnat=YES を追加しておく必要があります。

こうやってみると、FreeBSDではパケットフィルタのルール設定とNAT設定は別ファイルに分けられており、NPFではルールとNAT設定を単一の設定ファイルで行えるという違いがあるようですね。

# FreeBSD ipnatによるNAT設定
map pppoe0 192.168.10.0/24 -> 0/32 proxy port ftp ftp/tcp
map pppoe0 192.168.10.0/24 -> 0/32 portmap tcp/udp 40000:60000 mssclamp 1400
map pppoe0 192.168.10.0/24 -> 0/32

NPFでのポートフォワーディング

NPFでのポートフォワーディングは、特定のホスト・ポートにパケットを流すものと、指定したポート番号へのアクセスをローカルネットワーク内に転送するというものがあります。

特定のホスト・ポートにポートフォワーディングする

特定のホスト・ポートにパケットを転送する設定は、NATの設定と似ています。というよりも、NATでは -> で外に出てゆくパケットについて変換するルールを書いていたのに対し、ポートフォワーディングでは <- で外から入ってくるパケットを処理するという理解しやすい記述になっています。

例として、外部からのポート番号 2222 に対するアクセスを 172.16.0.222 番ポートに転送する設定を示します。

$ext_if = "wm1"
map $ext_if dynamic 172.16.0.2 port 22   <- $ext_v4 port 2222

また、外部から特定のポートにアクセスされた場合に、そのままローカルネットワーク内の特定のホストにパケットを転送する設定は以下になります。この設定の場合は、 222222 といったポートのマッピングを考えておく必要がなくなる(外部からアクセスしたポート番号のままパケットが転送される)ので便利かもしれません。

$ext_if = "wm1"
$allow_redir_ip4addrs = { 172.17.0.2 }

group "redirect" {
  pass stateful on $ext_if \
      from $allow_redir_ip4addrs to $ext_v4 port 5900
  pass stateful on $ext_if \
      from $allow_redir_ip4addrs to $ext_v4 port 2222
}

まとめ

NPFでのNATとポートフォワーディング設定について紹介しました。同等の設定をipfと比較しながら見てみると、NPFの記述はより分かりやすい感じがしますね。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0