1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

トライしたかったnftablesの基本(その2)

Posted at

nftablesでNATを実現

トライしたかったnftablesの基本(その1)」の続編。今回はNATの超基本であり、内容的には、「今さらながらiptables基本(その2)」と同じである。

参考サイト

  1. linuxのnftables(nft)でルータ機能を作る
  2. nftables
  3. Linuxにおける新たなパケットフィルタリングツール「nftables」入門

ネットワークトポロジー

下記環境にて実現。
image.png
左側がNAT内側、右側がNAT外側である。

設定

NAT

$ sudo nft create table ip nat_filter
$ sudo nft create chain ip nat_filter dst_nat {type nat hook prerouting priority dstnat \;}
$ sudo nft create chain ip nat_filter src_nat {type nat hook postrouting priority srcnat \;}
$ sudo nft add rule ip nat_filter src_nat oif enp0s8 masquerade
  • ”nat_filter”というテーブル作成
  • ”nat_filter”テーブル内に次のNATチェーンを作成
    • ”dst_nat”というPreRoutingチェーン
    • ”src_nat”というPostRoutingチェーン
  • ”src_nat”チェーン内に、NAT(masquerade)外側I/F”enp0s8”としたルールを作成

フィルター

上記NAT設定のみの場合、NAT外側からNAT内側へのアクセスができてしまうので、それを防ぐ設定が必要となる。

$ sudo nft create chain ip nat_filter filter_1 {type filter hook forward priority 0 \; policy drop \;}
$ sudo nft add rule ip nat_filter filter_1 iif enp0s3 oif enp0s8 accept
$ sudo nft add rule ip nat_filter filter_1 ct state related,established accept
  • ”nat_filter”テーブル内に、”filter_1”というフィルターチェーン(デフォルトDrop(破棄))を作成
  • ”filter_1”内に次のルールを作成
    • NAT内側(enp0s3)からNAT外側(enp0s8)へはAccept(許可)
    • セッションを保ったものなど(”related”,”established”)はAccept(許可)(NAT外側からNAT内側)

最終的な設定

$ sudo nft -a list ruleset
table ip nat_filter { # handle 1
        chain dst_nat { # handle 1
                type nat hook prerouting priority dstnat; policy accept;
        }

        chain src_nat { # handle 2
                type nat hook postrouting priority srcnat; policy accept;
                oif "enp0s8" masquerade # handle 5
        }

        chain filter_1 { # handle 6
                type filter hook forward priority filter; policy drop;
                iif "enp0s3" oif "enp0s8" accept # handle 7
                ct state established,related accept # handle 10
        }
}

検証

netcat(nc)およびpingによる検証である。

コマンド実行

Client(192.168.10.10)

NATclient.png

Server(172.16.0.21)

NATserver.png

解説
  • Server(IP address: 172.16.0.21)でTCPポート1234で待受
  • Client(IP address: 192.168.10.10)から同ポートへTCPアクセス
  • Clientでテキスト”From Inside”を送信
  • Serverで同内容を受信
  • Serverでテキスト”From Outside”を送信
  • Clientで同内容を受信
  • ClientでTCPセッションクローズ(Ctrl-C入力)
  • ServerでClientへpingするが疎通なし

ネットワークキャプチャデータ

上記の状況をWiresharkで取得したもの。いずれも期待値どおりである。

Client

Clientのコピー.png

  • 青枠:Client(IP address: 192.168.10.10)からServer(IP address: 172.16.0.21)への通信
  • 赤枠:Serverへのテキスト”From Inside”の送信

Client2のコピー.png

  • 赤枠:Serverからのテキスト”From Outside”の受信
Server

Serverのコピー.png

  • 青枠:Client(NATで変換されたIP address: 172.16.0.1)からServer(IP address: 172.16.0.21)への通信
  • 赤枠:Clientからのテキスト”From Inside”の受信

Server2のコピー.png

  • 赤枠:Clientへのテキスト”From Outside”の送信
  • 青枠:Clientへのping応答なし

おわりに

その3では、ebtables相当を実現予定。

1
0
0

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?