Skip to content

Instantly share code, notes, and snippets.

@wych42
Last active April 11, 2020 15:09
Show Gist options
  • Save wych42/d784977c020565c7fdd8f877d9282af8 to your computer and use it in GitHub Desktop.
Save wych42/d784977c020565c7fdd8f877d9282af8 to your computer and use it in GitHub Desktop.

前提: 已经有 DNS server 配置好,并且在运行中。地址为: dns-a 和 dns-b。

配置

包依赖

aptitude install keepalived ipvsadm

virtual server(lvs router) 配置

  • 开启 ip_forward: /sbin/sysctl -w net.ipv4.ip_forward=1
  • keepalived 配置
global_defs {
    router_id DNS_LVS_1 #LVS负载均衡标识,在一个网络里,要保持是唯一的。
}

vrrp_sync_group VGM {
    group {
        VI_DNS
    }
}

vrrp_instance VI_DNS {
    state BACKUP
    interface bond1
    lvs_sync_daemon_interface bond1
    virtual_router_id 101
    priority 110
    advert_int 3
    authentication {
        auth_type PASS
        auth_pass lvs
    }
    unicast_src_ip lvs-master
    unicast_peer {
        lvs-slave
    }
    virtual_ipaddress {
        lvs-vip
    }
}

virtual_server lvs-vip 53 {
    delay_loop 6
    lb_algo rr
    lb_kind TUN
    protocol UDP
    real_server dns-a 53 {
        MISC_CHECK {
            connect_timeout 11
            misc_path "/etc/keepalived/dnscheck -h dns-a"
        }
    }
    real_server dns-b 53 {
        MISC_CHECK {
            connect_timeout 11
            misc_path "/etc/keepalived/dnscheck -h dns-b"
        }
    }
}

# if tcp is used, copy udp section and change protocol.
...
  • 启动 keepalived 后,用 ipvsadm -Ln 检查 lvs 规则是否正确。

real server (DNS server 上的配置)

TUN 模式

  • 先加载 ipip 模块。 modprobe ipip,并把 ipip 加到 /etc/modules 里自动加载。
  • 干掉 arp_ignore 和 arp_announce。
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  • 配置 tun 网络设备和地址。
ip link set up tunl0
ip addr add lvs-vip/32 dev tunl0

记得把这些配置加到 /etc/network/interfaces 里开启自动生效。

TUN 和 DR 模式的选择

在这种纯内网的环境下,理想的选择是 DR 模式。大多数文档都提到 DR 模式对网络的要求是 virtual server 和 real server 都在一个 vlan 里,其实这里的要求是机器的 link layer 是直接连通的。而上面的配置情况里,虽然服务器都在一个 vlan,但是 vlan 开启了 ARP Proxy, DR 就不能工作啦。这个问题可以看LVS 文档 中关于 DR 模式的原理。

参考资料:

  1. http://www.linuxvirtualserver.org/zh/index.html
  2. http://www.keepalived.org/documentation.html
  3. https://wiki.debian.org/Bind9
  4. https://kb.isc.org/article/AA-01031 (official)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment