FreeBSDでのNAT設定の概要と比較

この記事では、FreeBSD OSでNATを設定する例を示し、私の意見では最も頻繁に使用される方法を比較したいと思います。

開始するには:
NAT(英語版。ネットワークアドレス変換-「ネットワークアドレス変換」)は、TCP / IPネットワークのメカニズムであり、通過パケットのIPアドレスを変換できます。 IPマスカレーディング、ネットワークマスカレーディング、ネイティブアドレス変換とも呼ばれます。

考慮されるオプション:
-デーモン・ナット
-IPFilter(ipnat)
-PF nat
-ng_nat
-ipfw nat(カーネルnat)


natdを使用したNAT

ハンドブックから:
一般にnatd(8)として知られるFreeBSDのネットワークアドレス変換デーモンは、着信IPパケットを受け入れ、送信者アドレスをローカルマシンアドレスに変更し、発信パケットストリームでそれらのパケットを再送信するデーモンです。 natdは、送信者のIPアドレスとポートを変更することによりこれを行い、データを受信したときに、初期データのソースの場所を特定し、最初にデータを要求したマシンに転送できるようにします。

Natdが動作するにはipfwが必要です。
コア内:
#Ipfwサポート
オプションIPFIREWALL
オプションIPFIREWALL_VERBOSE
オプション "IPFIREWALL_VERBOSE_LIMIT = 100"
NATのインターフェイスに着信する#DIVERTパケット
オプションIPDIVERT

/etc/rc.confに追加します
gateway_enable = "yes"
または/etc/sysctl.conf add
net.inet.ip.forwarding = 1。

em0-外部インターフェース
192.168.0.0/24-内部ネットワーク
200.200.200.200-外部アドレス

また、/ etc / rc.confに以下を追加します。
natd_enable = "YES"
natd_interface = "em0"
natd_flags = ""

ファイアウォールへの迂回のルールを追加します。
/ sbin / ipfwは、192.168.0.0 / 24からem0を介して任意の出力にnatd ipを転送します。
/ sbin / ipfwは、em0経由でnatd ipを任意から200.200.200.200に追加します

詳細は、 ハンドブックで説明されています。

IPFilterを使用したNAT(ipnat)

コア内:
オプションIPFILTER
オプションIPFILTER_LOG
またはモジュールとしてロードし、カーネルに触れないでください。

/etc/rc.confに追加します
gateway_enable = "yes"
または/etc/sysctl.conf add
net.inet.ip.forwarding = 1。

また、/ etc / rc.confに以下を追加します。
ipnat_enable = "YES"#ipnatをオンにする
ipnat_program = "/ sbin / ipnat"#ipnatパス
ipnat_rules = "/ etc / ipnat.rules"#ルール
ipnat_flags = ""#開始するパラメータ

syslog.confのログを維持するには、次を追加します。
local0。* /var/log/ipmon.log
IPFilter--Dvasキーを使用したipmon監視ユーティリティを実行します
-D-デーモンとして実行
-v-ドリルダウン
-a-すべてのIPFilterデバイスを追跡します
-s-syslog経由

例:

次の場合:
em0-外部インターフェース
192.168.0.0/24-内部ネットワーク
200.200.200.200-外部アドレス

次に、Natのルールの例は次のようになります。
em0を192.168.0.0/24からany-> 200.200.200.200/32にマップします

または、宛先アドレスを指定せずに:
map em0 192.168.0.0/24-> 200.200.200.200/32

アドレスが動的な場合、これを行うことができます:
マップem0 192.168.0.0/24-> 0.0.0.0/32

ipnatを使用する場合の便利なコマンド:
ipnatを再起動します。
/etc/rc.d/ipnat restart
Natロボットの一般的な統計:
ipnat –s
アクティブなルールのリストと現在アクティブなセッションのリスト:
ipnat –l
構成を再読み取りします。
ipnat -CF -f /etc/ipnat.rules
-C-ルールテーブルをクリアします。
-F-変換テーブルからエントリを削除します。
ipnatおよびIPFilterの一般的な詳細については、次のサイトから学ぶことができます。
ipnat(1)、ipnat(5)、ipnat(8)、ipf(5)、ipf(8)、ipfstat(8)、ipftest(1)、ipmon(8)
詳細はこちら

pfを使用したNAT

コア内:
device pf#PF OpenBSDパケットフィルターファイアウォールを有効にする
device pflog#Pfログのサポート

/etc/rc.confに追加します
gateway_enable = "yes"
または/etc/sysctl.conf add
net.inet.ip.forwarding = 1。

また/etc/rc.confに以下を追加します:
pf_enable = "YES"
pf_rules = "/ etc / pf.conf"
pf_program = "/ sbin / pfctl"
pf_flags = ""
pflog_enable = "YES"
pflog_logfile = "/ var / log / pf.log"
pflog_program = "/ sbin / pflogd"
pflog_flags = ""

ルール自体の例:
em0-外部インターフェース
192.168.0.0/24-内部ネットワーク
200.200.200.200-外部アドレス

/etc/pf.conf内:
192.168.0.0/24からanyへのem0のnat->(em0)

ng_natを使用したNAT

コア内:
オプションNETGRAPH
オプションNETGRAPH_IPFW
オプションLIBALIAS
オプションNETGRAPH_NAT
...および必要に応じて他のnetgrafオプション

または、単にモジュールをロードします。
/ sbin / kldload /boot/kernel/ng_ipfw.ko
/ sbin / kldload /boot/kernel/ng_nat.ko

em0-外部インターフェース
192.168.0.0/24-内部ネットワーク
200.200.200.200-外部アドレス

NATノードの作成:
ngctl mkpeer ipfw:nat 60 out
ngctl name ipfw:60 nat
ngctl connect ipfw:nat:61 in
ngctl msg nat:setaliasaddr 200.200.200.200
ipfwで、作成したノードにトラフィックをリダイレクトする行を追加します。
/ sbin / ipfwはem0経由で200.200.200.200にnetgraph 61を追加します。
/ sbin / ipfwは、192.168.0.0 / 24からem0を介してすべてにnetgraph 60を追加します
さらに
sysctl net.inet.ip.fw.one_pass = 0

スクリプトの形式で記述されたすべてのものを作成し、autoloadの起動権とともに/usr/local/etc/rc.dに配置します。

詳細はこちら

ipfw natを使用したNAT

FreeBSDバージョン7.0以降、ipfw natのサポートが登場しました
コアへ:
オプションIPFIREWALL
オプションIPFIREWALL_DEFAULT_TO_ACCEPT
オプションIPFIREWALL_FORWARD
オプションIPFIREWALL_VERBOSE
オプションIPFIREWALL_VERBOSE_LIMIT = 50
オプションIPFIREWALL_NAT
オプションLIBALIAS

/etc/rc.confに追加します
firewall_enable = "YES"
firewall_nat_enable = "YES"
firewall_type = "/ etc / firewall"
gateway_enable = "YES"

/etc/sysctl.confに以下を追加します。
net.inet.ip.fw.one_pass = 1

em0-外部インターフェース
192.168.0.0/24-内部ネットワーク
200.200.200.200-外部アドレス

例:

/ sbin / ipfwは、em0がsame_portsをリセットした場合にnat 1構成ログを追加します
/ sbin / ipfw nat0.0 ipを192.168.0.0/24からem0経由でテーブル\(10 \)以外に追加
/ sbin / ipfwは、em0を介してanyからnat 1 ipを200.200.200.200に追加します
表10-natを通過しない場合

一部の統計は次のように表示できます。
ipfw nat 1 show

ちょっとした比較

ipfw、natd、ipf、ipnatはうまくいっていると言わなければなりません。 同時に、フィルターの機能を覚えておく必要があります:ipfwは最初の一致で動作し、ipf(ルールのクイックオプションなし)-最後の一致で動作します。 さて、パケットがフィルターを通過する順序に常に留意する必要があります。 そのため、カーネルでipfサポートが収集されると、ipfwの起動方法に関係なく、最初にすべてのパケットがipfルールを通過し、ipfwは入力することでスキップしたもののみを取得します。 ipfwがカーネルに組み込まれ、ipfがモジュールとしてロードされている場合、ipfwはプライマシー権を使用します。

違いと機能を考慮すると、次の点に注意できます。

Natd:
-トラフィックが40〜50メガビットを超えると、 ダイは無効になります
-悪魔としての実現
-複数のインターフェースで作業する場合の問題
+簡単なセットアップ
+機能性、柔軟性

イプナト:
+簡単なセットアップ
+コアへの「近接」
-非常に重い負荷の場合、チューニングが必要です


ng_nat:
-比較的複雑なセットアップ
-redirect_portの方法がわからない
+カーネルのlibalias経由で実装
+消費するリソースは比較的少ない

Ipfw nat:
+速度
+柔軟性
+カーネルのlibalias経由で実装
Nightfly UPD:
-通常、プールの下から大量のエイリアスなしでプルできない
-スラー統計
+ついに流れが止まった
+他とは異なり、ボックスのアクティブFTPを使用できるため、FTPプロキシを近くに置かない
+ natを介した同時pptpでのジョークなどの小児疾患に苦しんでいない

Pf nat:
+速度
+マクロを使用してルールを記述する
-smpの問題

結論

トピックが少し不満であり、読者の意見が私の意見と一致しない可能性があるため、上記のオプションのいずれにも言及しません。 構成例を説明し、FreeBSDでの多くのNAT構成方法を比較しようとしました。 また、NATの部分はここにあるため、説明しませんでし

Source: https://habr.com/ru/post/J111580/


All Articles