2つのネットワークセグメントを中継します。
下図中の「内部ルータ」に位置して、2枚のNICで互いを中継します。
研究室にLAN回線は来ているが、ここから研究室内部に独自のネットワークを作りたい事はあるかも知れない。
それはセキュリティー対策だったり、クラスターサーバ向けとかいろいろ。まあ興味本位もあるかも。
それを実現させるためには、上図のような「内部ルータ」が必要になる。
専用HWではなく、中古のPCでも「内部ルータ」は簡単に作れて下記のような複数の選択肢があります
ここではこれらについて記述する。
*情報部局から許可されないケースもあります。
*windowsXPでも試したが、、、IPEnableRouterを有効にしても、routeコマンドを調整しても隔離マシンから外に繋げなかった...なぜ?
router/windows
router/Bridge
router/CentOS7
router/pfsense
router/NFS
RTX830
本家様 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メモリーを対象にします。
[Write]ボタンをクリックするとコピーが始まります。
完了後、8GBのUSBメモリーが、1.38MBのサイズに縮小されてしまいます。そうゆうものです。
加えて、USBメモリーはFATファイルシステムに塗り替えられたので、floppyfwのコンテンツは
windowsアプリケーションで編集可能です。
■設定方針
■設定
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 ~]#
通常の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 ~]#
[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
[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を除きできていない。
from | to | コマンド | 結果 |
10.0.0.2 | 192.168.0.3 c.chaperone.jp | ping 192.168.0.3 ping c.chaperone.jp | 接続不可 |
10.0.0.1 | ping 10.0.0.1 | OK routerのeth1 | |
192.168.0.22 | ping 192.168.0.22 | OK routerのeth2 | |
router.chaperone.jp | ping 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 ~]#
from | to | コマンド | 結果 |
10.0.0.2 | 192.168.0.3 c.chaperone.jp | ping 192.168.0.3 ping c.chaperone.jp | 接続不可 |
10.0.0.1 | ping 10.0.0.1 | OK | |
192.168.0.22 | ping 192.168.0.22 | OK | |
router.chaperone.jp | ping router.chaperone.jp | 接続不可 |
っと無理で、理由はパケットを受け取ったto側が、応答しようにも先方のアドレス10.0.0.2への行き道をしらないからである。
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
とする。これで
from | to | コマンド | 結果 |
10.0.0.2 | 192.168.0.3 c.chaperone.jp | ping 192.168.0.3 ping c.chaperone.jp | OK |
10.0.0.1 | ping 10.0.0.1 | OK | |
192.168.0.22 | ping 192.168.0.22 | OK | |
router.chaperone.jp | ping router.chaperone.jp | OK |
と「隔離LAN -> サービスLAN」はOK。
一方、逆側へのアクセス「サービスLAN -> 隔離LAN」の場合だとrouterのこのポート番号は、隔離LAN内マシンAのhttpであると事前に定義する必要がある。