GREトンネルを使用するDCNの疑似構成
ネットワーク構成
- OSはCentOS 6で記載、CentOS 7ではネットワークインタフェースの設定方法などが異なるがGREトンネルの部分は同じ
192.168.90.0/24のセグメントがDCN、192.168.100.0/24のセグメントがinband- DCNとinbandは直接ルーティングせず、
ems1/ems2とgne1/gne2で作成するGREトンネルを経由して通信する ems1/ems2のトンネル対象アドレスは192.168.100.0/24とは別のセグメントにしないと、rne1からのパケットがゲートウェイに向かわないems1/ems2からgne1/gne2/rne1へのルーティングはIPごとにstatic routeを設定rne1のデフォルトゲートウェイはgne1/gne2で構成するVRRPのVIPems1/ems2とgne1/gne2/rne1の通信は上りと下りの経路が非対称になる場合があるgne1のeth0やeth1がダウンしたら、ems1/ems2でgne1/rne1へのstatic routeを変更してgne2経由でアクセスできるようにする
GREトンネルの設定
ems1
経路が非対称になるため、rp_filterを無効にする。
- /etc/sysctl.conf
# Controls source route verification net.ipv4.conf.default.rp_filter = 2
- /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 HWADDR=xx:xx:xx:xx:xx:xx TYPE=Ethernet UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx NM_CONTROLLED=yes ONBOOT=yes BOOTPROTO=none IPADDR=192.168.90.11 NETMASK=255.255.255.0
iptablesでGREパケットの受信を許可する。
- /etc/sysconfig/iptables
-A INPUT -p icmp -j ACCEPT # 下の1行を追加 -A INPUT -p gre -j ACCEPT -A INPUT -i lo -j ACCEPT
CentOS 7の場合はiptalbesではなくfirewall-cmdで設定する。
firewall-cmd --add-service=gre --permanent firewall-cmd --reload
設定の反映。
sysctl -p ifup eth0 service iptables restart
GREトンネルの作成。/etc/rc.localあたりに書けば永続化できる。
ip tun add tun_gne1 mode gre remote 192.168.90.101 local 192.168.90.11 ip tun add tun_gne2 mode gre remote 192.168.90.102 local 192.168.90.11 ip link set dev tun_gne1 up ip link set dev tun_gne2 up # 通常はローカルとピアのIPアドレスを指定することでstatic routeも設定される # ip addr add local 192.168.101.11 remote 192.168.100.101 dev tun_gne1 # ip addr add local 192.168.101.11 remote 192.168.100.102 dev tun_gne2 # 今回はstatic routeの切り替えでgneとrneを同じように扱いたいので個別に設定 ip addr add 192.168.101.11 dev tun_gne1 ip addr add 192.168.101.11 dev tun_gne2 ip route add 191.168.100.101 dev tun_gne1 ip route add 191.168.100.102 dev tun_gne2 ip route add 192.168.100.111 dev tun_gne1 ip route add 192.168.100.112 dev tun_gne2 ip route add 192.168.100.113 dev tun_gne1 ip route add 192.168.100.114 dev tun_gne2
ems2
- /etc/sysctl.conf
# Controls source route verification net.ipv4.conf.default.rp_filter = 2
- /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 HWADDR=xx:xx:xx:xx:xx:xx TYPE=Ethernet UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx NM_CONTROLLED=yes ONBOOT=yes BOOTPROTO=none IPADDR=192.168.90.12 NETMASK=255.255.255.0
- /etc/sysconfig/iptables
-A INPUT -p icmp -j ACCEPT # 下の1行を追加 -A INPUT -p gre -j ACCEPT -A INPUT -i lo -j ACCEPT
sysctl -p ifup eth0 service iptables restart
ip tun add tun_gne1 mode gre remote 192.168.90.101 local 192.168.90.12 ip tun add tun_gne2 mode gre remote 192.168.90.102 local 192.168.90.12 ip link set dev tun_gne1 up ip link set dev tun_gne2 up ip addr add 192.168.101.12 dev tun_gne1 ip addr add 192.168.101.12 dev tun_gne2 ip route add 191.168.100.101 dev tun_gne1 ip route add 191.168.100.102 dev tun_gne2 ip route add 192.168.100.111 dev tun_gne1 ip route add 192.168.100.112 dev tun_gne2 ip route add 192.168.100.113 dev tun_gne1 ip route add 192.168.100.114 dev tun_gne2
gne1
rne1向けの通信を中継するのでフォワーディングを有効にする。
- /etc/sysctl.conf
# Controls IP packet forwarding net.ipv4.ip_forward=1
- /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 HWADDR=xx:xx:xx:xx:xx:xx TYPE=Ethernet UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx NM_CONTROLLED=yes ONBOOT=yes BOOTPROTO=none IPADDR=192.168.90.101 NETMASK=255.255.255.0
- /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1 HWADDR=xx:xx:xx:xx:xx:xx TYPE=Ethernet UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx NM_CONTROLLED=yes ONBOOT=yes BOOTPROTO=none IPADDR=192.168.100.101 NETMASK=255.255.255.0
GREパケットの有効化に加えて、ems1/ems2とinbandの中継も許可する。
CentOS 7の場合、GREパケットの有効化はfirewall-cmdで設定し、
中継用の設定が不要なためiptablesは使用しない。
- /etc/sysconfig/iptables
-A INPUT -p icmp -j ACCEPT # 下の1行を追加 -A INPUT -p gre -j ACCEPT -A INPUT -i lo -j ACCEPT # 下の2行を追加 -A FORWARD -s 192.168.100.0/24 -d 192.168.101.0/24 -j ACCEPT -A FORWARD -s 192.168.101.0/24 -d 192.168.100.0/24 -j ACCEPT -A FORWARD -j REJECT --reject-with icmp-host-prohibited
設定の反映。
sysctl -p ifup eth0 ifup eth1 service iptables restart
GREトンネルの作成。
ip tun add tun_ems1 mode gre remote 192.168.90.11 local 192.168.90.101 ip tun add tun_ems2 mode gre remote 192.168.90.12 local 192.168.90.101 ip link set dev tun_ems1 up ip link set dev tun_ems2 up # 本来はstatic routeでsrcを指定すればトンネルデバイスにIPを設定してなくも良い # ip route add 192.168.101.11 dev tun_ems1 src 192.168.100.101 # ip route add 192.168.101.12 dev tun_ems2 src 192.168.100.101 # 今回はアドレスを付与しないと障害の疑似でeth1をダウンしたらgne宛てが疎通しなくなる ip addr add 192.168.100.101 dev tun_ems1 ip addr add 192.168.100.101 dev tun_ems2 ip route add 192.168.101.11 dev tun_ems1 ip route add 192.168.101.12 dev tun_ems2
gne2
- /etc/sysctl.conf
# Controls IP packet forwarding net.ipv4.ip_forward=1
- /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 HWADDR=xx:xx:xx:xx:xx:xx TYPE=Ethernet UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx NM_CONTROLLED=yes ONBOOT=yes BOOTPROTO=none IPADDR=192.168.90.102 NETMASK=255.255.255.0
- /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1 HWADDR=xx:xx:xx:xx:xx:xx TYPE=Ethernet UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx NM_CONTROLLED=yes ONBOOT=yes BOOTPROTO=none IPADDR=192.168.100.102 NETMASK=255.255.255.0
- /etc/sysconfig/iptables
-A INPUT -p icmp -j ACCEPT # 下の1行を追加 -A INPUT -p gre -j ACCEPT -A INPUT -i lo -j ACCEPT # 下の2行を追加 -A FORWARD -s 192.168.100.0/24 -d 192.168.101.0/24 -j ACCEPT -A FORWARD -s 192.168.101.0/24 -d 192.168.100.0/24 -j ACCEPT -A FORWARD -j REJECT --reject-with icmp-host-prohibited
sysctl -p ifup eth0 ifup eth1 service iptables restart
ip tun add tun_ems1 mode gre remote 192.168.90.11 local 192.168.90.102 ip tun add tun_ems2 mode gre remote 192.168.90.12 local 192.168.90.102 ip link set dev tun_ems1 up ip link set dev tun_ems2 up ip addr add 192.168.100.102 dev tun_ems1 ip addr add 192.168.100.102 dev tun_ems2 ip route add 192.168.101.11 dev tun_ems1 ip route add 192.168.101.12 dev tun_ems2
keepalivedによるVRRPの設定
gne1とgne2でVRRPの仮想IPインスタンスを作成し、rne1のデフォルトゲートウェイに使用する。
gne1/gne2共通
yum install keepalived
iptablesでVRRPの受信を許可する。
- /etc/sysconfig/iptables
-A INPUT -p icmp -j ACCEPT -A INPUT -p gre -j ACCEPT # 下の行を追加 -A INPUT -p vrrp -j ACCEPT -A INPUT -i lo -j ACCEPT
CentOS 7の場合はiptalbesではなくfirewall-cmdで設定する。
firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent firewall-cmd --reload
gne1
- /etc/keepalived/keepalived.conf
- vrrp_instance INBAND {
- state MASTER
- interface eth1
- virtual_router_id 51
- priority 100
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtural_ipaddress {
- 192.168.100.100
- }
- track_interface {
- eth0
- }
- }
gne2
- /etc/keepalived/keepalived.conf
- vrrp_instance INBAND {
- state BACKUP
- interface eth1
- virtual_router_id 51
- priority 99
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtural_ipaddress {
- 192.168.100.100
- }
- track_interface {
- eth0
- }
- }
gne1/gne2共通
service iptables restart chkconfig keepalived on service keepalived start
rneの設定
経路が非対称になるため、rp_filterを無効にする。
- /etc/sysctl.conf
# Controls source route verification net.ipv4.conf.default.rp_filter = 2
デフォルトゲートウェイの設定。
- /etc/sysconfig/network
NETWORKING=yes HOSTNAME=rne1.localdomain GATEWAY=192.168.100.100
- /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 HWADDR=xx:xx:xx:xx:xx:xx TYPE=Ethernet UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx NM_CONTROLLED=yes ONBOOT=yes BOOTPROTO=none IPADDR0=192.168.100.111 NETMASK0=255.255.255.0 IPADDR1=192.168.100.112 NETMASK1=255.255.255.0 IPADDR2=192.168.100.113 NETMASK2=255.255.255.0 IPADDR3=192.168.100.114 NETMASK3=255.255.255.0
設定を反映。
sysctl -p
service network restart
障害の疑似
gne1とems1/ems2間の通信障害
gne1
障害発生を疑似。
ifdown eth0
ems1とems2宛をトンネルからgne2経由に切り替え。
できればここを自動化したい。
ip route del 192.168.101.11 ip route del 192.168.101.12 ip route add 192.168.101.11 via 192.168.100.102 ip route add 192.168.101.12 via 192.168.100.102
ems1/ems2
gne1とrne1宛をgne2経由に切り替え。
ip route del 192.168.100.101 ip route del 192.168.100.111 ip route del 192.168.100.113 ip route add 192.168.100.101 dev tun_gne2 ip route add 192.168.100.111 dev tun_gne2 ip route add 192.168.100.113 dev tun_gne2
gne1とrne1間の通信障害
gne1
障害発生を疑似。
ifdown eth1
ems1/ems2
rne1宛をgne2経由に切り替え。
ip route del 192.168.100.111 ip route del 192.168.100.113 ip route add 192.168.100.111 dev tun_gne2 ip route add 192.168.100.113 dev tun_gne2