最新更新日 '99.03.02.


NAT でパケット転送。手作りルータ。
 FreeBSD3.1-RELEASE で natd を立てて安全なセグメントを作りましょう。そもそも、IIJ-PPP を利用して ppp した場合は、NAT 機能が備わっているのでなぁんもする必要が無いのですが、OCN とかを利用した場合は有った方が嬉しいかな。ほとんどムジンゾウな IP を手に入れる事が出来るのでね;-)。では、ネットワーク構成図です。

                  +---------+
------------------|Provider |--------------- InterNet
                  +----+----+
                       |
                   +---+---+
       +-----------+Router | 
       |           +-------+
       | NIC1:xl0 203.137.154.151
  +----+----+ 外部セグメント
==| FreeBSD | ========================
  +----+----+ 内部セグメント
       | NIC2:ed1 192.168.1.1
       |         +------+
       +---------+ HUB  |
                 +-+--+-+        
       +-----------+  +------------+
  +----+----+                  +---+---+
  | FreeBSD |                  | Win95 |
  +---------+                  +-------+
  192.168.1.10                 192.168.1.11
  HostName:shiro               HostName:boss

 こんな感じの図でしょうか。プロバイダと専用線接続を想定しています。外部セグメントにはグローバル IP 分のサーバを構築できますが、今回は、nat するマシンに全て載せると仮定します。

 nat するマシン名は、pochi といいます。 NIC が二枚刺してあります。ed1 の方はローカル IP を利用します。xl0 は 203.137.154.151 でグローバル IP を利用します。

 と、言う事はつまり、192.168.1.10 から出て行くパケットは、192.168.1.1 を通って、203.137.154.151 のパケットとして外に出て行きます。
 戻って来たパケットはその逆で、203.137.154.151 から、192.168.1.1 に変換されて元のマシンの 192.168.1.10 にに届きます。

 では、早速設定してみましょう。まず第一になんと言ってもカーネルに認識させる事です。今回、僕は面倒したくないので、PCI のカード二枚ざしです。

--- config -----
device xl0
device ed0
----------------
--- dmesg ------
Feb 25 20:05:15 pochi /kernel: ed1  rev 0 int a irq 9 on pci0:9:0
Feb 25 20:05:15 pochi /kernel: CI Ethernet (RealTek 8029)> rev 0 int a irq 9 on pci0:9:0
Feb 25 20:05:15 pochi /kernel: ed1: address 00:00:b4:56:30:55, type NE2000 (16 bit) 
Feb 25 20:05:15 pochi /kernel: ed1: address 00:00:b4:56:30:55, type NE2000 (16 bit) 
Feb 25 20:05:15 pochi /kernel: xl0 <3Com 3c905 Fast Etherlink XL 10/100BaseTX> rev 0 int a irq 9 on pci0
:10:0
Feb 25 20:05:15 pochi /kernel: xl0 <3Com 3c905 Fast Etherlink XL 10/100BaseTX> rev 0 int a irq 9 on pci0
:10:0
Feb 25 20:05:15 pochi /kernel: xl0: Ethernet address: 00:60:08:42:be:ab
Feb 25 20:05:15 pochi /kernel: xl0: Ethernet address: 00:60:08:42:be:ab
Feb 25 20:05:15 pochi /kernel: xl0: autoneg complete, link status good (half-duplex, 100Mbps)
Feb 25 20:05:15 pochi /kernel: xl0: autoneg complete, link status good (half-duplex, 100Mbps)
----------------
 これでカーネルの準備は整いました。さささ、今度は、NIC に IP を付けて上げる事にしましょう。/usr/local/etc/rc.d/alias_ed1.sh とか言うのを作って、
----------------
#!/bin/csh
ifconfig ed1 inet 192.168.1.1 netmask 255.255.255.0 alias
route add -host 192.168.1.1  127.0.0.1
----------------
とかしても全然問題無いですし、/etc/rc.conf に
----------------
network_interfaces="xl0 ed1 lo0" # List of network interfaces (lo0 is loopback).
ifconfig_xl0="inet 203.137.154.151  netmask 255.255.255.0"
ifconfig_ed1="inet 192.168.1.1  netmask 255.255.255.0"
ifconfig_lo0="inet 127.0.0.1"   # default loopback device configuration.
----------------
と、追加しても全然これっぽっちも問題ないです。はい。これでネットワークカードに付いての設定はおしまい。後は、ifconfig -a とかして、二枚の NIC に IP が付いている事を確認しましょう。

 続いて、nat 部分の設定の設定に移ります。以下の行が必要になります。

----------------
firewall_enable="YES"	# Set to YES to enable firewall functionality
firewall_type="open"    # Firewall type (see /etc/rc.firewall)
gateway_enable="YES"	
natd_enable="YES"	# Enable natd if firewall_enable.
natd_interface="xl0"    # Public interface to use with natd if natd_enable.
natd_flags=""           # Additional flags for natd.
----------------
 これだけの設定を /etc/rc.conf に追加します。上の NIC の設定と合わせるとずいぶんな量ですね。この中で注意する点ですが、natd_interface="xl0" です。これは、外部と接続する方の NIC を指定してあげます。firewall_type="open" はま、これで良いでしょ(^^;;。

 と、まぁ、こんな感じに設定したらマシンをリブートしてみましょう。そして、いよいよ動作検証です。内部セグメントに繋げるマシンのデェフォルトゲートウェイを 192.168.1.1 に設定します。 Win95 では Network の設定にあります。FreeBSD の場合は、defaultrouter="192.168.1.1" と指定してあげます。これで、まず ping を打ちます。ping 192.168.1.1 して返って来るか? 外部の IP に対し、ping を打って返って来るか?はたまた Netscape を見てちゃんと見えるか?

ね?ちゃんと見えたでしょぉ?ふふふ(^^)。簡単なのだ。良かったよぉぉ。ネットワークが見える様になると楽しいですね。ふふふ(^^)。そしてあなたは自分でルータを作ってしまったと言う事になります。ラッキー;-)。

 後は、pochi に bind-8.1.2 とかを立ち上げればもうばっちり。外部用 DNS と、内部用 DNS を立ち上げればもう、OK です。ふふふ;-)。

 火の壁設定とかに付いてはここでは書きません。多分今後も書く事は無いと思います。他の web を見るか自分で頑張ってください。


Copyright (c) 1997-2004 takachan@running-dog.net All Rights Reserved.