ゲートウェイは複数のネットワークを連結するシステムです。ゲートウェイという用語は外部 IP アドレスに向かう経路に出るために必須のローカルネットワークの「出口」を意味する場合が多いです。ゲートウェイは相互に連結する各ネットワークに接続されており、複数のインターフェース間で IP パケットを相互に伝送するためのルータとして振る舞います。
ローカルネットワークがプライベートアドレス (インターネットにルーティングされないアドレス) 範囲を使う場合、ゲートウェイはアドレスマスカレードを実行する必要があります。アドレスマスカレードを使うことで、ローカルネットワーク上のマシンが外部と通信することが可能になります。マスカレード動作とはネットワークレベルのプロキシ動作のようなものです。すなわち、内部のマシンからの外部宛接続はゲートウェイ自身からの接続に置き替えられます (なぜなら、ゲートウェイは外部にルーティングできるアドレスを持っているからです)。マスカレード接続を通過するデータは外部に送信され、応答として戻ってくるデータはマスカレード接続を通過して内部のマシンに送信されます。ゲートウェイはこの目的に専用の TCP ポート範囲を使います。この範囲は通常とても大きな番号 (60000 番より大きい番号) です。内部マシンからの接続はこれらの予約されたポート番号の 1 つから送信された接続として外部に送信されます。
ゲートウェイでは 2 種類のネットワークアドレス変換 (略して NAT) が実行されます。1 種類目は Destination NAT (DNAT) で、(通常は) 到着した接続の宛先 IP アドレス (および TCP や UDP ポート) を書き換える手法です。接続追跡メカニズムによって、通信の継続性を保証するために同じ接続でそれ以降に使われるパケットの宛先が書き換えられます。NAT の 2 種類目は Source NAT (SNAT) で、マスカレードは SNAT の特別な場合です。SNAT は (通常は) 出て行く接続のソース IP アドレス (および TCP や UDP ポート) を書き換えます。DNAT に関して言えば、出て行く接続の全パケットが接続追跡メカニズムによって適切に取り扱われます。NAT は IPv4 と IPv4 の制限されたアドレス空間だけに関連します。一方で IPv6 では、アドレス空間が広くなったことにより、すべての「内部」アドレスは直接インターネットにルーティングできるようになるため、NAT の有用性が減ります (これは内部マシンにアクセスできるようになることを意味しているのではありません。なぜなら、中間ファイアウォールがトラフィックをフィルタするからです)。
理論はここまでにして、具体的な例を説明します。Debian システムをゲートウェイとして機能させるには、以下に示す通り /proc/
仮想ファイルシステムを使って、Linux カーネルの適切なオプションを有効化するだけです。
#
echo 1 > /proc/sys/net/ipv4/conf/default/forwarding
このオプションを起動時に自動的に有効化するには、/etc/sysctl.conf
の net.ipv4.conf.default.forwarding
オプションを 1
に設定してください。
例 10.1 /etc/sysctl.conf
ファイル
net.ipv4.conf.default.forwarding = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.tcp_syncookies = 1
IPv6 に対して同様の効果を与えるには、IPv4 に対して手作業で行ったコマンドの ipv4
を単純に ipv6
へ置換して実行するか、/etc/sysctl.conf
中の net.ipv6.conf.all.forwarding
オプションを 1
に設定してください。
IPv4 マスカレードを設定するには少し複雑な作業が必要です。すなわち netfilter ファイアウォールを設定する必要があります。