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