CentOS6でルータを作る

ネットワーク的にルータの動きを学んだり、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

異常時)※同上のため略

参考

Linuxマシンをルータにする方法

コメント

タイトルとURLをコピーしました