ネットワーク的にルータの動きを学んだり、ESXiやHyper-V上で
複数のネットワークを跨いだ動作検証をする時にでも活用ください。
サマリ
インストールしたCentOS6に下記の設定を入れ、ルータとして機能させる。(ミニマム構成:可)
# cat /proc/sys/net/ipv4/ip_forward
0
# vi /etc/sysctl.conf
以下を0から1に修正
net.ipv4.ip_forward = 1
# sysctl -p /etc/sysctl.conf
# cat /proc/sys/net/ipv4/ip_forward
1
# iptables -I FORWARD -i eth1 -o eth0 -j ACCEPT
# iptables -I FORWARD -i eth0 -o eth1 -j ACCEPT
# service iptables save
補足)NAT変換もする場合(192.168.1.0を内部、172.16.0.0を外部として内→外の通信)
# iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -j MASQUERADE
# iptables -t nat -A POSTROUTING -d 192.168.1.0/255.255.255.0 -j MASQUERADE
# service iptables save
利用シーン
例えば、下記のような構成でネットワークを跨いだ通信が必要な場合に利用する。
ルータに必要となる機能・モジュール
OSの基本機能を利用するため、最小構成のLinuxで実現可能
・network:ネットワークの基本機能
・iptables:Linux上でのファイアウォール機能
・sysctl:Linux上の基本的な機能に関する設定
前提・事前準備
・仮想マシンを作成し、CentOS6を最小構成でインストールする。
・ルータとするLinuxには、2つのNICを接続しておき、下記のIPとしておく。
仮想SW#1 eth0:192.168.1.1/24 ※GW、DNS不要
仮想SW#2 eth1:172.16.0.1/24 ※GW、DNS不要
Linuxルータ
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=XX:XX:XX:XX:XX:XX #実環境に合わせる
TYPE=Ethernet
UUID=XXXXXXXXXXXXXXX #実環境に合わせる
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.1.1
NETMASK=255.255.255.0
NETWORK=192.168.1.0
# vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
HWADDR=XX:XX:XX:XX:XX:XX #実環境に合わせる
TYPE=Ethernet
UUID=XXXXXXXXXXXXXXX #実環境に合わせる
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=172.16.0.1
NETMASK=255.255.255.0
NETWORK=172.16.0.0
・各クライアントと通信できることを確認しておく。
Linuxルータから疎通確認する。
# ping 192.168.1.100
PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data.
64 bytes from 192.168.1.100: icmp_seq=1 ttl=64 time=0.052 ms
64 bytes from 192.168.1.100: icmp_seq=2 ttl=64 time=0.096 ms
64 bytes from 192.168.1.100: icmp_seq=3 ttl=64 time=0.100 ms
^C
--- 192.168.1.100 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2376ms
rtt min/avg/max/mdev = 0.052/0.082/0.100/0.024 ms
# ping 172.16.0.100
PING 172.16.0.100 (172.16.0.100) 56(84) bytes of data.
64 bytes from 172.16.0.100: icmp_seq=1 ttl=64 time=0.184 ms
64 bytes from 172.16.0.100: icmp_seq=2 ttl=64 time=0.106 ms
64 bytes from 172.16.0.100: icmp_seq=3 ttl=64 time=0.095 ms
^C
--- 172.16.0.100 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2321ms
rtt min/avg/max/mdev = 0.095/0.128/0.184/0.040 ms
設定値
OSのデフォルトは、ルータ機能で必要となるフォワーディング機能が
無効化されているため、有効化することでルータとして動作させる。
①IPフォワーディング設定を有効にする。(デフォルト:無効)
※フォワーディング:複数のeth間でパケットをパスさせるための設定
Linuxルータ
# vi /etc/sysctl.conf
以下を0から1に修正
net.ipv4.ip_forward = 1
# sysctl -p /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
# cat /proc/sys/net/ipv4/ip_forward
1
②FWの設定でフォワーディングパケットを許可する。(デフォルト:拒否)
Linuxルータ
# iptables -I FORWARD -i eth1 -o eth0 -j ACCEPT
# iptables -I FORWARD -i eth0 -o eth1 -j ACCEPT
# service iptables save
③補足:NAT変換する場合は下記を更に追加する。
Linuxルータ
# iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -j MASQUERADE
# iptables -t nat -A POSTROUTING -d 192.168.1.0/255.255.255.0 -j MASQUERADE
# service iptables save
動作確認
・「192.168.1.100」の端末から、「172.16.0.100」に対して通信をしてみる。
192.168.1.100の端末から疎通確認する。
正常時)
# ping 172.16.0.100
PING 172.16.0.100 (172.16.0.100) 56(84) bytes of data.
64 bytes from 172.16.0.100: icmp_seq=1 ttl=63 time=0.716 ms
64 bytes from 172.16.0.100: icmp_seq=2 ttl=63 time=0.139 ms
64 bytes from 172.16.0.100: icmp_seq=3 ttl=63 time=0.155 ms
異常時の例1(FWで通信が出来ない場合)
# ping 172.16.0.100
PING 172.16.0.100 (172.16.0.100) 56(84) bytes of data.
From 192.168.1.1 icmp_seq=1 Destination Host Prohibited
From 192.168.1.1 icmp_seq=2 Destination Host Prohibited
From 192.168.1.1 icmp_seq=3 Destination Host Prohibited
異常時の例2(自端末のGW設定やルーティングなどに不備がある場合)
# ping 172.16.0.100
PING 172.16.0.100 (172.16.0.100) 56(84) bytes of data.
From 192.168.1.100 icmp_seq=2 Destination Host Unreachable
From 192.168.1.100 icmp_seq=3 Destination Host Unreachable
From 192.168.1.100 icmp_seq=4 Destination Host Unreachable
異常時の例3(通信相手のGW設定やルーティングなどに不備がある、またはダウンしている場合)
# ping 172.16.0.100
PING 172.16.0.100 (172.16.0.100) 56(84) bytes of data.
(何も表示されない)
^C
--- 172.16.0.100 ping statistics ---
332 packets transmitted, 0 received, 100% packet loss, time 331409ms
・逆方向の確認として「172.16.0.100」の端末から、「192.168.1.100」に対して通信をしてみる。
172.16.0.100の端末から疎通確認する。
正常時)
# ping 192.168.1.100
PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data.
64 bytes from 192.168.1.100: icmp_seq=1 ttl=63 time=0.114 ms
64 bytes from 192.168.1.100: icmp_seq=2 ttl=63 time=0.161 ms
64 bytes from 192.168.1.100: icmp_seq=3 ttl=63 time=0.144 ms
異常時)※同上のため略
コメント