千家信息网

LVS+OSPF IPV6 部署

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,【背景】今年ipv6的事情再次提上议程,工信部一直在强推,不知道大家都开搞没有?我们这边收到的要求是这样的:一开始只是说Q4只要保证测试环境下主要业务功能可以在ipv6 环境下顺利运作即可,突然就变成
千家信息网最后更新 2025年12月01日LVS+OSPF IPV6 部署

【背景】

今年ipv6的事情再次提上议程,工信部一直在强推,不知道大家都开搞没有?我们这边收到的要求是这样的:



一开始只是说Q4只要保证测试环境下主要业务功能可以在ipv6 环境下顺利运作即可,突然就变成至少灰度10%的线上流量到ipv6环境

这段时间都在折腾ipv6 的事情,各种环境部署联调什么的,翻阅不少资料,但网上关于这块的资料实在太少了,环境部署期间踩过不少坑,这里简单记录下。


【部署】



lb-01

lb-02

rs-01

rs-02

vip

ipv4

10.1.1.111

10.1.1.112

10.1.1.113

10.1.1.114

10.21.5.7

ipv6

240e:45e:1111:1ff::1

240e:45e:1111:1ff::2

240e:45e:1111:1ff::3

240e:45e:1111:1ff::4

240e:97d:1111:2ff::2



一、ospf

1、打开ospf6d进程监听

ipv6环境下相比原来ipv4,需要额外打开ospf6d

root@node-01:/etc/quagga# cat  daemonszebra=yesbgpd=noospfd=yesospf6d=yesripd=noripngd=noisisd=no


2、配置ospf

root@node-01:/etc/quagga#  cat /etc/quagga/ospf6d.conf!! Zebra configuration saved from vty!   2019/11/21 11:55:20!hostname ospf6dpassword zebralog stdoutlog file /var/log/quagga/ospf6d.log!!interface eth0ipv6 ospf6 hello-interval 1ipv6 ospf6 dead-interval 3ipv6 ospf6 priority 0ipv6 ospf6 instance-id 0interface loipv6 ospf6 hello-interval 1ipv6 ospf6 dead-interval 3ipv6 ospf6 priority 0ipv6 ospf6 instance-id 0router ospf6 router-id 10.1.1.111 interface eth0 area 0.0.0.0 interface lo area 0.0.0.0!line vty


以下是ipv4的ospf 配置,可以对比下配置之间的差异

!! Zebra configuration saved from vty!   2019/10/15 16:51:09!hostname ospfdpassword zebralog stdoutlog file /var/log/quagga/ospf.log!!interface eth0!ip ospf hello-interval 1ip ospf dead-interval 3ip ospf priority 0interface eth2!ip ospf hello-interval 1ip ospf dead-interval 3ip ospf priority 0!router ospfospf router-id 10.1.1.111network 10.21.5.7/32 area 0.0.0.0network 10.1.1.0/24 area 0.0.0.0!line vty


注意事项:

  • log file 建议设置一个额外的日志路径,跟原来ipv4 ospfd 日志分开打印,方便日后排查问题

  • router ospf 配置改成router ospf6

  • ospf 进程id一般使用机器IP(保证唯一即可)

  • 还有一个最大的不同就是机器IP网段跟VIP不需要在router ospf 里面宣告,ipv6只需要指定哪些接口需要对外宣告即可


3、启动quagga

root@node-01:/etc/quagga# /etc/init.d/quagga restart[ ok ] Restarting quagga (via systemctl): quagga.service.


启动后会看到多watch 了一个ospf6d进程

root@node-01:/etc/quagga# ps aux|grep quaggaquagga   25820  0.0  0.0  24496   616 ?        Ss   15:15   0:00 /usr/lib/quagga/zebra --daemon -A 127.0.0.1quagga   25824  0.0  0.0  26980  2732 ?        Ss   15:15   0:00 /usr/lib/quagga/ospfd --daemon -A 127.0.0.1quagga   25828  0.0  0.0  24556   628 ?        Ss   15:15   0:00 /usr/lib/quagga/ospf6d --daemon -A ::1root     25833  0.0  0.0  15428   168 ?        Ss   15:15   0:00 /usr/lib/quagga/watchquagga --daemon zebra ospfd ospf6d


telnet 本地2606 端口

root@node-01:/etc/quagga# telnet ::1 2606Trying ::1...Connected to ::1.Escape character is '^]'.Hello, this is Quagga (version 0.99.24.1).Copyright 1996-2005 Kunihiro Ishiguro, et al.User Access Verificationospf6d> show ipv6 ospf6 neighborNeighbor ID     Pri    DeadTime  State/IfState         Duration I/F[State]10.1.1.1   255    00:00:02   Full/DR              00:00:09 eth0[DROther]


注:这里遇到一个坑,由于我们跑的是TUNNEL模式的LVS,需要将MTU设小,在ospf起来后,发现没办法跟交换机建立邻居,交换机侧日志显示需要将交换机接口MTU设成一样的值(我们的环境下是1440)

而ipv4 环境下交换机侧并不需要设置MTU。


4、配置VIP

LB 上面启动ipv6 vip

有两种配置方式:(IPV6相关操作命令见文末)

方式一:

root@node01:/etc/quagga#  ip addr add 240E:97D:1111:2FF::2/64 dev lo:vip1 label lo:vip1


方式二:

root@node01:/etc/quagga#  /sbin/ifconfig lo:vip3 inet6 add 240E:97D:1111:2FF::2/64



5、测试ipv6 vip连通性

root@ubuntu:/usr/local/named/etc# ping6 240e:97d:1111:2ff::2 -c 3PING 240e:97d:1111:2ff::2(240e:97d:1111:2ff::2) 56 data bytes64 bytes from 240e:97d:1111:2ff::2: icmp_seq=1 ttl=51 time=28.4 ms64 bytes from 240e:97d:1111:2ff::2: icmp_seq=2 ttl=51 time=28.4 ms64 bytes from 240e:97d:1111:2ff::2: icmp_seq=3 ttl=51 time=28.3 ms


注意:

测试的机器必须也有ipv6地址,否则会返回网络不可达


二、配置LVS

1、编译安装较新版本keepalived(这里我编译的是keepalived-2.0.18)

注:建议在 ubuntu16.04 以上版本环境下编译,尝试过在12.04 跟 14.04等低版本下ubuntu有些包找不到

root@ubuntu:/usr/local/src/keepalived-2.0.18# apt-get install libnftnl-dev libmnl-dev

root@ubuntu:/usr/local/src/keepalived-2.0.18# apt-get install iptables-dev libipset-dev libnl-3-dev libnl-genl-3-dev libssl-dev

root@ubuntu:/usr/local/src/keepalived-2.0.18# ./configure --prefix=/usr/local/keepalived

root@ubuntu:/usr/local/src/keepalived-2.0.18# make && make install



2、keepalived配置

方式一:命令行

root@node-01:/etc/quagga# ipvsadm -A -t [240e:97d:2014:1ff::2]:80 -s rrroot@node-01:/etc/quagga# ipvsadm -a -t [240e:97d:2014:1ff::2]:80 -r 10.21.41.43:80 -iroot@node-01:/etc/quagga# ipvsadm -a -t [240e:97d:2014:1ff::2]:80 -r 10.21.41.44:80 -i



方式二:

virtual_server 240e:97d:1111:2ff::2 80 {    delay_loop 6    lb_algo  wrr    lb_kind TUN    persistence_timeout 0    protocol TCP    real_server 240e:45e:1111:1ff::3 80 {        weight 10        TCP_CHECK {            connect_port 80            connect_timeout 8            nb_get_retry 3            delay_before_retry 3        }    }    real_server 240e:45e:1111:1ff::4 80 {        weight 10        TCP_CHECK {            connect_port 80            connect_timeout 8            nb_get_retry 3            delay_before_retry 3        }    }}


root@node-01:/etc/quagga# ipvsadm -lnIP Virtual Server version 1.2.1 (size=1048576)Prot LocalAddress:Port Scheduler Flags  -> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  [240e:97d:1111:2ff::2]:80 rr  -> [240e:45e:1111:1ff::3]:80    Tunnel  1      0          0           -> [240e:45e:1111:1ff::4]:80    Tunnel  1      0          0


3、配置RS VIP

LVS tunnel模式下,RS上面需要做2个事情,一个是起VIP,一个是跟LB间建立TUN隧道

root@node-03:~ # ip -6 tunnel add lvs6tun0 mode ip6ip6 local 240e:45e:1111:1ff::3 remote 240e:45e:1111:1ff::2 dev eth0root@node-03:~ # ip link set dev lvs6tun0 uproot@node-03:~ # ip -6 addr add 240e:97d:1111:2ff::2/64 dev lvs6tun0


创建ipv6 tunnel 命令说明,由于是点对点tunnel,这里需要指明local 即本地RSIP,remote 对端IP,也就是LB的IP

ip -6 tunnel add lvs6tun0 mode ip6ip6 local $rs-ip remote $lb-ip dev $interface


点对点顾名思义就是每个节点之间需要建立peer,n个LB节点,m个RS节点,最终需要建立 n * m 个tunnel


这里跟ipv4 比较大的区别是,ipv6没有广播地址,没办法建立一个一对多的tunnel,只能基于ip6ip6协议建立一个点对点的tunnel,下面是ipv4环境下tunnel 创建的方式,可以对比下:

/sbin/ifconfig tunl0 $vip broadcast $vip netmask 255.255.255.255 up/sbin/route add -host $vip dev tunl0


4、服务测试

在一台拥有ipv6 的机器上(不能是上述集群中的机器),尝试通过ipv6 vip 访问

root@ubuntu:~ # for i in {0..999};do nc -6 -v -w 1 240e:97d:1111:2ff::2 80;doneConnection to 240e:97d:1111:2ff::2 80 port [tcp/http] succeeded!Connection to 240e:97d:1111:2ff::2 80 port [tcp/http] succeeded!Connection to 240e:97d:1111:2ff::2 80 port [tcp/http] succeeded!... ...root@ubuntu:~ # curl http://[240e:97d:1111:2ff::2]/ -H"Host:ipv6-test.aaa.com"Test Page


至此,测试环境可以正常通信。


另外说明一点,测试的时候也验证了LVS NAT/DR模式,都可以原生支持,不像TUNNEL 这么麻烦,像DR模式,RS上配置个VIP上去就完事了。之所以没采用DR,是因为DR模式存在LB跟RS必须在同个网段的限制,我们生产环境无法保证LB跟RS一定在同网段。而NAT性能较差,FullNAT 也有一部分业务在用,性能不是特别好,依赖nf_conntrack 表,最后选择了TUNNEL模式。



注意:

部署过程中ipv6 tunnel 的配置最费劲,尝试过各种方式,都不行。现象是LB 给RS 发了SYN包,但收不到ACK, LB上连接处于一个SYNC_RECV状态(通过ipvsadm -lnc 可以看到连接状态)

最后通过上面的点对点tunnel方式解决,暂时没有其他更合适的方式,后续发现了再更新下。

上述只是一个基本可用的测试环境,要正式上线的话还需要进行各种性能、参数调优才行。


ipv6 其实涉及的东西非常多,并不仅仅只有上面提到的,还有DNS、GSLB、业务、网络、CDN等等各个层面都会涉及相关的改造。测试的话可以玩一玩,但正式上线还是得谨慎,毕竟据我了解国内很多运营商对ipv6 支持还不是特别好,据上次跟阿里云的同学交流,在相同场景下,从ipv4 切到 ipv6 性能会降20%-40%,需要靠后期不断优化,总的来说任重道远。



附:

1、IPV6环境测试网站

纯ipv6环境请使用:http://ipv6.test-ipv6.com

双栈环境请使用:http://www.test-ipv6.com/


2、ipv6相关指令

http://tldp.org/HOWTO/Linux+IPv6-HOWTO/ch06s02.html

http://tldp.org/HOWTO/Linux+IPv6-HOWTO/ch07s02.html

http://tldp.org/HOWTO/Linux+IPv6-HOWTO/ch04s03.html




环境 配置 方式 测试 模式 机器 交换机 性能 业务 事情 命令 日志 网段 节点 进程 保证 尝试 之间 办法 只是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 江苏南通互联网服务器 网络安全治理主体 广电总局 网络安全竞赛 广州启联互联网科技有限公司 学位证翻译软件开发 老虎教练无法连接服务器 成都网络安全优秀柚米 网络安全推广 阿里云云服务器已过期怎么续费 战地五新手哪个服务器体验好 中国人民保险软件开发 刺激战场连接服务器不稳定 一起来飞车不同服务器 乡镇网络安全自检自查报告 医院软件开发工程师考试 主机cod17连接不上服务器 上海能远互联网科技有限公司 软件平台服务器配置 浙江信大 网络安全 网络安全日是干什么的 国家堆进网络安全 福州软件开发工程师工资水平 机器人软件开发平台完整版 数据库怎么插到另一个表格 泰安联想服务器总代理客服电话 申请企业软件开发硬件环境 网络安全事件应急处置一盘流程 软件开发工程师厉害吗 昆山正规服务器生产商 基因测序服务器价格
0