2つのネットワークセグメントを中継します。
下図中の「内部ルータ」に位置して、2枚のNICで互いを中継します。

2014y08m09d_013111303.png

研究室にLAN回線は来ているが、ここから研究室内部に独自のネットワークを作りたい事はあるかも知れない。
それはセキュリティー対策だったり、クラスターサーバ向けとかいろいろ。まあ興味本位もあるかも。
それを実現させるためには、上図のような「内部ルータ」が必要になる。
専用HWではなく、中古のPCでも「内部ルータ」は簡単に作れて下記のような複数の選択肢があります

  • floppyfw
  • CentOS6

ここではこれらについて記述する。
*情報部局から許可されないケースもあります。
*windowsXPでも試したが、、、IPEnableRouterを有効にしても、routeコマンドを調整しても隔離マシンから外に繋げなかった...なぜ?

router/pfsense
router/NFS
router/SquidClamAV

floppyfw

本家様 http://www.zelow.no/floppyfw/index.html (ffw4として続いている模様https://github.com/thomasez/ffw4)
1枚のfloppyディスクで、ルータになれて、同時にファイアーウォールやDHCPらの機能が付けられる優れもの。
最新版の イメージファイル(floppyfw-3.0.15.img) を取得して、USBメモリーに中身を移して、USBメモリーで起動して使ってみる。
*今時floppyドライブは高級品ですから....
*VMware ESXi内部のルーターとして使用するなら、そのまま imgファイル で使用できます

イメージファイルの中身をUSBメモリーに移すにはFreeNAS/USB?でも使った Win32 Disk Imager を使用します。
Win32 Disk Imagerを起動して、移す対象のUSBメモリーを対象にします。
2014y08m10d_075521104.png
[Write]ボタンをクリックするとコピーが始まります。
完了後、8GBのUSBメモリーが、1.38MBのサイズに縮小されてしまいます。そうゆうものです。
2014y08m10d_080110788.png
加えて、USBメモリーはFATファイルシステムに塗り替えられたので、floppyfwのコンテンツは
windowsアプリケーションで編集可能です。
2014y08m10d_080949975.png

■設定方針

  1. ルータは静的ルーティングで、NAT機能は提供しない
  2. サービスLAN側のNICには、192.168.0.22、隔離LAN側のNICは、10.0.0.1を割り当てる

■設定
CONFIG ファイルをテキストエディッタで開いて編集します

CONNECT_TYPE=STATIC
OUTSIDE_DEV=eth0                       *サービスLAN側は 192.168.0.19/24
INSIDE_DEV=eth1                        *隔離LAN側は     10.0.0.0/24
 
INSIDE_IP=10.0.0.1                     *サービスLAN側に晒すNICのIPアドレス 10.0.0.1
INSIDE_NETMASK=255.255.255.0
 
OUTSIDE_IP=192.168.0.22                *隔離LAN側に晒すNICのIPアドレス 192.168.0.22
OUTSIDE_NETMASK=255.255.255.0
 
DEFAULT_GATEWAY=192.168.0.1            *サービスLAN側に存在する DEFAULT GATEWAY
OUTSIDE_NAMESERVERS="192.168.0.3"      *サービスLAN側に存在する DNSサーバ
HOSTNAME=router
DOMAIN=chaperone.jp
TIMEZONE=JST-9

次にfirewall.ini ファイルをテキストエディッタで開いて編集します

echo 1 > /proc/sys/net/ipv4/ip_forward    *6行目を有効に
edit 0                                    *7行目を有効に

■起動
完成したUSBメモリーをPCに差し込んで起動すればルータになります。
もしINSIDEとOUTSIDEが逆になるなら *_DEV の eth0とeth1を付け替えて回避します。
ルータへのログインはユーザrootで、パスワードなしで入れます。パスワードもCONFIGファイルで定義できます。平文のままでいいならPASSWORDに、DESで暗号化されたパスワードを用いるなら、暗号化された文字列をDES_PASSWORDに定義します。

内部ルータのルーティングテーブルは下記のようになります。

# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric  Ref     Use Iface
10.0.0.0        *               255.255.255.0   U     0       0         0 eth1
192.168.0.0     *               255.255.255.0   U     0       0         0 eth0
default         192.168.0.1     0.0.0.0         UG    1       0         0 eth0
#

■テスト
隔離LANからサービスLANおよびインターネットにping/sshを行っても問題なく繋がる。
隔離マシンのルーティングテーブルは下記になります。

[root@isolate ]# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.0.0.0        *               255.255.255.0   U         0 0          0 eth0
default         10.0.0.1        0.0.0.0         UG        0 0          0 eth0
[root@isolate ]#

*/etc/sysconfig/networkにNOZEROCONF=yesを付与してます

サービスLAN側から隔離LANには直接には繋がりません。routeで隔離LAN向けの経路を追加しないと無理。しかも隔離マシンを使いたいサービスLAN側のマシンすべてに対処が必要です。

[root@c130 ~]# route add -net 10.0.0.0/24 gw 192.168.0.22
[root@c130 ~]# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.0.0.0        router.chaperon 255.255.255.0   UG        0 0          0 eth0
192.168.0.0     *               255.255.255.0   U         0 0          0 eth0
default         gw.chaperone.jp 0.0.0.0         UG        0 0          0 eth0
[root@c130 ~]#
[root@c130 ~]# ping -c1 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=63 time=0.904 ms
 
--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.904/0.904/0.904/0.000 ms
[root@c130 ~]#

CentOS6

通常のLinuxにNICを二枚のせて、ルータにしてしまう場合。
*隔離LAN側がクラスターマシンで構成され、内部ルータをNFSストレージとさせて、サービスLAN側からも使えるようにするなど

二枚のNICは、片方がサービスLAN側の eth0(192.168.0.22/24)、もう片方はeth1(10.0.0.1/24)とします。
OSインストール時にeth0は定めたので、eth1のみを追加で定義する

eth1を定義します。方法は2通り提示する。どちらでも構わない。

  • 設定ファイルを直接修正して定義するなら
    [root@router ~]# ifconfig -a | grep eth1
    eth1      Link encap:Ethernet  HWaddr 00:0C:29:1B:3F:8C
     
    [root@router ~]#
    [root@router ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth1
    DEVICE=eth1
    HWADDR=00:0C:29:1B:3F:8C      *この値は「ifconfig -a | grep eth1」から取得
    TYPE=Ethernet
    ONBOOT=yes
    IPADDR=10.0.0.1
    NETMASK=255.255.255.0
     
    [root@router ~]# /etc/init.d/network restart   *もしくは再起動
    [root@router ~]# ifconfig eth1
    eth1      Link encap:Ethernet  HWaddr 00:0C:29:1B:3F:8C
              inet addr:10.0.0.1  Bcast:10.0.0.255  Mask:255.255.255.0
              inet6 addr: fe80::20c:29ff:fe1b:3f8c/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:2 errors:0 dropped:0 overruns:0 frame:0
              TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:120 (120.0 b)  TX bytes:552 (552.0 b)
     
    [root@router ~]#
  • ツールを使って定義するなら「system-config-network-tui」を使います
    [root@router ~]# ifconfig eth1 down
    [root@router ~]# rm /etc/sysconfig/network-scripts/ifcfg-eth1
    [root@router ~]# yum -y install system-config-network-tui
    [root@router ~]# system-config-network-tui
    1.system-config-network-tuiを起動して、「デバイス設定」を選ぶ
    2.「<新規のデバイス>」を選ぶ
    3.「イーサネット」を選ぶ
    4.名前「eth1」、デバイス「eth1」、静的IP「10.0.0.1」、サブネットマスク「255.255.255.0」として「OK」を選ぶ
    5.「保存」を選ぶ
    6.「保存して終了」を選ぶ。そして
    [root@router ~]# 
    [root@router ~]# /etc/init.d/network restart
    [root@router ~]# ifconfig eth1
    eth1      Link encap:Ethernet  HWaddr 00:0C:29:1B:3F:8C
              inet addr:10.0.0.1  Bcast:10.0.0.255  Mask:255.255.255.0
              inet6 addr: fe80::20c:29ff:fe1b:3f8c/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:2 errors:0 dropped:0 overruns:0 frame:0
              TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:120 (120.0 b)  TX bytes:636 (636.0 b)
     
    [root@router ~]#

eth1のIPアドレス定義後、この段階で隔離マシン(IP:10.0.0.2/24, GW:10.0.0.1, DNS:192.168.0.3)からはサービスLAN側(192.168.0.0/24)へのアクセスはこのrouterを除きできていない。

fromtoコマンド結果
10.0.0.2192.168.0.3
c.chaperone.jp
ping 192.168.0.3
ping c.chaperone.jp
接続不可
10.0.0.1ping 10.0.0.1OK
routerのeth1
192.168.0.22ping 192.168.0.22OK
routerのeth2
router.chaperone.jpping router.chaperone.jp接続不可

IPフォワードを有効にしただけでは

[root@router ~]# cat /proc/sys/net/ipv4/ip_forward
0
[root@router ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@router ~]#
fromtoコマンド結果
10.0.0.2192.168.0.3
c.chaperone.jp
ping 192.168.0.3
ping c.chaperone.jp
接続不可
10.0.0.1ping 10.0.0.1OK
192.168.0.22ping 192.168.0.22OK
router.chaperone.jpping router.chaperone.jp接続不可

っと無理で、理由はパケットを受け取ったto側が、応答しようにも先方のアドレス10.0.0.2への行き道をしらないからである。
2014y12m08d_232257141.png
routeコマンドを使って、10.0.0.2への行き道を 192.168.0.3(c.chaperone.jp) に伝える。

[root@c ~]# route add -net 10.0.0.0/24 gw 192.168.0.22 eth0
[root@c ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        router.chaperon 255.255.255.0   UG    0      0        0 eth0
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0
link-local      *               255.255.0.0     U     1002   0        0 eth0
default         gw.chaperone.jp 0.0.0.0         UG    0      0        0 eth0
[root@c ~]#

これで10.0.0.2から192.168.0.3へping/ssh接続が通る事になる。
*192.168.0.3側からは10.0.0.2から来たと記録される

だけど、サービスLAN側の全てのホストにデフォルトゲートウエイ以外の経路情報をrouteコマンドで加えるのは面倒である。
それを回避するために、中継となるルータにiptableのNAT機能を適用する。この機能は中継となるルータが代理でサービスLAN側へアクセスする形式をとる。そのため経路問題は発生せず、受けた側は同一のネットワークからのアクセスと見做している。

っでその設定は、

[root@router ~]# /etc/init.d/iptables start
[root@router ~]# /sbin/iptables -F
[root@router ~]#
[root@router ~]# /etc/init.d/iptables status
テーブル: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
 
Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
 
Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
 
[root@router ~]#
[root@router ~]# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
[root@router ~]#
[root@router ~]# /etc/init.d/iptables status
テーブル: nat
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination
 
Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination
1    MASQUERADE  all  --  0.0.0.0/0            0.0.0.0/0
 
Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
 
テーブル: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
 
Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
 
Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
 
[root@router ~]#
[root@router ~]# /sbin/iptables-save > /etc/sysconfig/iptables
[root@router ~]# chkconfig iptables on

とする。これで

fromtoコマンド結果
10.0.0.2192.168.0.3
c.chaperone.jp
ping 192.168.0.3
ping c.chaperone.jp
OK
10.0.0.1ping 10.0.0.1OK
192.168.0.22ping 192.168.0.22OK
router.chaperone.jpping router.chaperone.jpOK

と「隔離LAN -> サービスLAN」はOK。
一方、逆側へのアクセス「サービスLAN -> 隔離LAN」の場合だとrouterのこのポート番号は、隔離LAN内マシンAのhttpであると事前に定義する必要がある。


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2016-04-28 (木) 22:53:32 (421d)