#author("2020-06-29T23:00:40+00:00","default:sysosa","sysosa") #author("2021-04-26T06:50:06+00:00","default:sysosa","sysosa") 2つのネットワークセグメントを中継します。 下図中の「&color(magenta){内部ルータ};」に位置して、2枚のNICで互いを中継します。 &ref(2014y08m09d_013111303.png,nolink,noborder); 研究室にLAN回線は来ているが、ここから研究室内部に独自のネットワークを作りたい事はあるかも知れない。 それはセキュリティー対策だったり、クラスターサーバ向けとかいろいろ。まあ興味本位もあるかも。 それを実現させるためには、上図のような「&color(magenta){内部ルータ};」が必要になる。 専用HWではなく、中古のPCでも「&color(magenta){内部ルータ};」は簡単に作れて下記のような複数の選択肢があります -floppyfw -CentOS6 ここではこれらについて記述する。 &color(red){*};&size(10){情報部局から許可されないケースもあります。}; &color(red){*};&size(10){windowsXPでも試したが、、、IPEnableRouterを有効にしても、routeコマンドを調整しても隔離マシンから外に繋げなかった...なぜ?}; [[router/windows]] [[router/Bridge]] [[router/CentOS7]] [[router/pfsense]] [[router/NFS]] [[RTX830]] &size(10){[[router/SquidClamAV]]}; ***floppyfw [#g049c88f] 本家様 http://www.zelow.no/floppyfw/index.html (ffw4として続いている模様[[https://github.com/thomasez/ffw4>+https://github.com/thomasez/ffw4]]) 1枚のfloppyディスクで、ルータになれて、同時にファイアーウォールやDHCPらの機能が付けられる優れもの。 最新版の イメージファイル(floppyfw-3.0.15.img) を取得して、USBメモリーに中身を移して、USBメモリーで起動して使ってみる。 &color(red){*};&size(10){今時floppyドライブは高級品ですから....}; &color(red){*};&size(10){VMware ESXi内部のルーターとして使用するなら、そのまま imgファイル で使用できます}; イメージファイルの中身をUSBメモリーに移すには[[FreeNAS/USB]]でも使った Win32 Disk Imager を使用します。 Win32 Disk Imagerを起動して、移す対象のUSBメモリーを対象にします。 &ref(2014y08m10d_075521104.png,nolink); [Write]ボタンをクリックするとコピーが始まります。 完了後、8GBのUSBメモリーが、1.38MBのサイズに縮小されてしまいます。そうゆうものです。 &ref(2014y08m10d_080110788.png,nolink); 加えて、USBメモリーは&color(darkgreen){''FATファイルシステム''};に塗り替えられたので、floppyfwのコンテンツは windowsアプリケーションで編集可能です。 &ref(2014y08m10d_080949975.png,nolink); ■設定方針 +ルータは静的ルーティングで、NAT機能は提供しない +サービスLAN側のNICには、192.168.0.22、隔離LAN側のNICは、10.0.0.1を割り当てる ■設定 &color(orangered){CONFIG}; ファイルをテキストエディッタで開いて編集します #code(nonumber){{ 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 }} 次に&color(mediumvioletred){firewall.ini}; ファイルをテキストエディッタで開いて編集します #code(nonumber){{ echo 1 > /proc/sys/net/ipv4/ip_forward *6行目を有効に edit 0 *7行目を有効に }} ■起動 完成したUSBメモリーをPCに差し込んで起動すればルータになります。 もしINSIDEとOUTSIDEが逆になるなら *_DEV の eth0とeth1を付け替えて回避します。 ルータへのログインはユーザrootで、パスワードなしで入れます。パスワードも&color(orangered){CONFIG};ファイルで定義できます。平文のままでいいならPASSWORDに、DESで暗号化されたパスワードを用いるなら、暗号化された文字列をDES_PASSWORDに定義します。 &color(magenta){内部ルータ};のルーティングテーブルは下記のようになります。 #code(nonumber){{ # 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を行っても問題なく繋がる。 隔離マシンのルーティングテーブルは下記になります。 #code(nonumber){{ [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 ]# }} &color(red){*};&size(10){/etc/sysconfig/networkに&color(orange){NOZEROCONF=yes};を付与してます}; サービスLAN側から隔離LANには直接には繋がりません。routeで隔離LAN向けの経路を追加しないと無理。しかも隔離マシンを使いたいサービスLAN側のマシンすべてに対処が必要です。 #code(nonumber){{ [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 [#l03460b4] 通常のLinuxにNICを二枚のせて、ルータにしてしまう場合。 &color(red){*};&size(10){隔離LAN側がクラスターマシンで構成され、&color(magenta){内部ルータ};をNFSストレージとさせて、サービスLAN側からも使えるようにするなど}; 二枚のNICは、片方がサービスLAN側の eth0(192.168.0.22/24)、もう片方はeth1(10.0.0.1/24)とします。 OSインストール時にeth0は定めたので、eth1のみを追加で定義する eth1を定義します。方法は2通り提示する。どちらでも構わない。 -設定ファイルを直接修正して定義するなら #code(nonumber){{ [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」を使います #code(nonumber){{ [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.「保存して終了」を選ぶ。そして #code(nonumber){{ [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を除きできていない。 |BGCOLOR(YELLOW):from|BGCOLOR(YELLOW):to|BGCOLOR(YELLOW):コマンド|BGCOLOR(YELLOW):結果| |10.0.0.2|192.168.0.3&br;c.chaperone.jp|ping 192.168.0.3&br;ping c.chaperone.jp|接続不可| |~|10.0.0.1|ping 10.0.0.1|OK&br;routerのeth1| |~|192.168.0.22|ping 192.168.0.22|OK&br;routerのeth2| |~|router.chaperone.jp|ping router.chaperone.jp|接続不可| IPフォワードを有効にしただけでは #code(nonumber){{ [root@router ~]# cat /proc/sys/net/ipv4/ip_forward 0 [root@router ~]# echo 1 > /proc/sys/net/ipv4/ip_forward [root@router ~]# }} |BGCOLOR(YELLOW):from|BGCOLOR(YELLOW):to|BGCOLOR(YELLOW):コマンド|BGCOLOR(YELLOW):結果| |10.0.0.2|192.168.0.3&br;c.chaperone.jp|ping 192.168.0.3&br;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|接続不可| っと無理で、理由はパケットを受け取った&color(magenta){''to側''};が、応答しようにも先方のアドレス&color(orangered){''10.0.0.2への行き道''};をしらないからである。 &ref(2014y12m08d_232257141.png,nolink,noborder); &color(red){route};コマンドを使って、&color(orangered){''10.0.0.2への行き道''};を 192.168.0.3(c.chaperone.jp) に伝える。 #code(nonumber){{ [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接続が通る事になる。 &color(red){*};&size(10){192.168.0.3側からは10.0.0.2から来たと記録される}; だけど、サービスLAN側の全てのホストにデフォルトゲートウエイ以外の経路情報をrouteコマンドで加えるのは面倒である。 それを回避するために、中継となるルータにiptableのNAT機能を適用する。この機能は中継となるルータが代理でサービスLAN側へアクセスする形式をとる。そのため経路問題は発生せず、受けた側は同一のネットワークからのアクセスと見做している。 っでその設定は、 #code(nonumber){{ [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 }} とする。これで |BGCOLOR(YELLOW):from|BGCOLOR(YELLOW):to|BGCOLOR(YELLOW):コマンド|BGCOLOR(YELLOW):結果| |10.0.0.2|192.168.0.3&br;c.chaperone.jp|ping 192.168.0.3&br;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である''と事前に定義する必要がある。