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の部分はここにあるため、説明しませんでし



All Articles