底辺エンジニアの備忘録

30過ぎて、記憶力低下が著しい為、メモ代わりにしていく予定。 自身のスキルが低いので、内容の正確さは保障できません・・・OTL

LVS でのL3DSR

ちょっと前にやったLVSのDSR方式は同一セグメント上にリアルサーバがある方式。
今回はL3でのDSR方式を検証。

検証構成は以下

 

 

f:id:klock_3rd:20170225172244p:plain

 

上記構成でのL3DSRは以下のようにして実現。
 1.クライアントからのVIP宛通信は、LVSへ到着
 2.LVSはVIP宛のパケットをIPIPトンネルを使用して、リアルサーバへ振り分け
 3.IPIPトンネルから受けた、クライアントからのパケットをLVSを経由することなくクライアントへ直接返す。

今回は、IPIPトンネルも絡むので、LVSのConfigから整理

 

LVSのConfig

# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
notification_email {
}

router_id LVS_DEVEL
}

vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.1.10
}
}


include web_servers.conf
}

# cat /etc/keepalived/web_servers.conf
virtual_server_group web_servers {
10.1.1.10 80
}
virtual_server group web_servers {
delay_loop 3
lvs_sched wrr
lvs_method DR
protocol TCP
real_server 1.1.2.1 80 {
weight 1
inhibit_on_failure
HTTP_GET {
url {
path /health_check.html
status_code 200
}
connect_port 80
connect_timeout 3
}
}
real_server 1.1.2.2 80 {
weight 1
inhibit_on_failure
HTTP_GET {
url {
path /health_check.html
status_code 200
}
connect_port 80
connect_timeout 3
}
}
}

# cat /etc/sysctl.conf
# Controls IP packet forwarding

net.ipv4.ip_forward = 1

 

 

L2DSRと差異は、real_serverのIPがWeb01/02のTun0のIPを指定すること。
そして、今度はIPIPトンネルの為の設定を投入。


IPIPトンネル

# ip tunnel add tun0 mode ipip remote 10.1.2.1 local 10.1.1.1 dev eth0
# ip add add 1.1.1.1 peer 1.1.2.1 dev tun0
# ip link set tun0 mtu 1400
# ip link set tun0 up

 

# ip tunnel add tun1 mode ipip remote 10.1.2.2 local 10.1.1.1 dev eth0
# ip add add 1.1.1.1 peer 1.1.2.2 dev tun1
# ip link set tun1 mtu 1400
# ip link set tun1 up

上記で、Web01/02へのIPIPトンネルを準備
CLIで確認

# ip add show
<略>
3: tunl0: <NOARP> mtu 1480 qdisc noop state DOWN
link/ipip 0.0.0.0 brd 0.0.0.0
12: tun0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN
link/ipip 10.1.1.1 peer 10.1.2.1
inet 1.1.1.1 peer 1.1.2.1/32 scope global tun0
16: tun1: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1400 qdisc noqueue state UNKNOWN
link/ipip 10.1.1.1 peer 10.1.2.2
inet 1.1.1.1 peer 1.1.2.2/32 scope global tun1

 

今度はリアルサーバ側

# cat /etc/sysctl.conf
# Kernel sysctl configuration file for Red Hat Linux

<中略>

net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tun0.rp_filter = 0
#

ここもL2DSRとの差異は、tun0の「rp_filter = 0」の箇所

# cat /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=10.1.1.10
NETMASK=255.255.255.255
BROADCAST=10.1.1.10
ONBOOT=yes
NAME=loopback

 ここはL2DSR同様なので略
そして、LVSとのIPIPトンネルを張る

# ip tunnel add tun0 mode ipip remote 10.1.1.1 local 10.1.2.1 dev eth0
# ip add add 1.1.2.1 peer 1.1.1.1 dev tun0
# ip link set tun0 mtu 1400
# ip link set tun0 up

 

これで、L3 DSRの設定は終わり。