Bài 3: IPv6 Muticast
Sử dụng sơ đồ mạng như trong bài số 1, thực hiện tạo kịch bản multicast IPv6 trên một số trạm thuộc các mạng khác nhau. Router XORP được sử dụng để hỗ trợ tính năng multicast routing IPv6. Các bước thực hiện như sau:
- Bước 1: Cấu hình router XORP với phương pháp cố định Rendezvous Point (RP)
- Bước 2: Cấu hình XORP với phương pháp RP động dựa trên bootstrap
- Bước 3: Sử dụng ssmping để kiểm tra kết nối multicast
Bước 1: Cấu hình XORP cho các router với phương pháp cố định RP
Sử dụng file cấu hình multicast6.boot và sửa lại tên các giao diện kết nối mạng và địa chỉ link-local. Lưu ý tất cả các router cần được cấu hình cố định địa chỉ RP là R3 (fec2::2).
[root@R1 ~]# cat ./multicast6.boot /* $XORP$ */ interfaces { interface eth3 { vif eth3 { address fec0::1 { prefix-length: 64 } /* Note: The IPv6 link-local address must be configured */ address fe80::a00:27ff:fe2e:e103 { prefix-length: 64 } } } interface eth4 { vif eth4 { address fec1::1 { prefix-length: 64 } /* Note: The IPv6 link-local address must be configured */ address fe80::a00:27ff:fe47:e104 { prefix-length: 64 } } } } fea { unicast-forwarding6 { disable: false } } plumbing { mfea6 { disable: false interface eth3 { vif eth3 { disable: false } } interface eth4 { vif eth4 { disable: false } } interface register_vif { vif register_vif { /* Note: this vif should be always enabled */ disable: false } } } } protocols { mld { interface eth3 { vif eth3 { disable: false } } interface eth4 { vif eth4 { disable: false } } } } protocols { pimsm6 { interface eth3 { vif eth3 { disable: false dr-priority: 2 } } interface eth4 { vif eth4 { dr-priority: 2 disable: false } } interface register_vif { vif register_vif { /* Note: this vif should be always enabled */ disable: false } } /* Note: static-rps and bootstrap should not be mixed */ static-rps { rp fec2::2 { group-prefix ff00::/8 { } } } switch-to-spt-threshold { /* approx. 1K bytes/s (10Kbps) threshold */ disable: false interval: 100 bytes: 102400 } } } protocols { fib2mrib { disable: false } }
Chạy router XORP với file cấu hình multicast trên tất cả các router.
[root@localhost ~]# /usr/local/xorp/sbin/xorp_rtrmgr -b ./multicast6.boot
Sau khi chạy thành công router XORP với cấu hình multicast IPv6, router này sẽ join vào địa chỉ multicast chuẩn ff02::16 (địa chỉ các router hỗ trợ chuẩn IPv6 multicast - MLD) và ff02::d (địa chỉ các router hỗ trợ Protocol Independent Multicast - PIM). Có thể kiểm chứng bằng lệnh ping6 từ một máy khác:
[root@localhost ~]# ping6 -c 3 -I eth3 ff02::16 PING ff02::16(ff02::16) from fe80::a00:27ff:fee3:92c eth3: 56 data bytes 64 bytes from fe80::a00:27ff:fe2e:692: icmp_seq=1 ttl=64 time=0.815 ms 64 bytes from fe80::a00:27ff:fe47:aa3: icmp_seq=1 ttl=64 time=0.846 ms (DUP!) 64 bytes from fe80::a00:27ff:fe2e:692: icmp_seq=2 ttl=64 time=0.438 ms 64 bytes from fe80::a00:27ff:fe47:aa3: icmp_seq=2 ttl=64 time=0.462 ms (DUP!) 64 bytes from fe80::a00:27ff:fe47:aa3: icmp_seq=3 ttl=64 time=0.839 ms --- ff02::16 ping statistics --- 3 packets transmitted, 3 received, +2 duplicates, 0% packet loss, time 2001ms rtt min/avg/max/mdev = 0.438/0.680/0.846/0.188 ms
Lệnh netstat -g hiển thị các địa chỉ multicast mà máy hiện tại đang join vào. Chạy lệnh này trên máy router sẽ thấy tất cả các giao diện mạng đều đã join vào ff02::16 và ff02::d:
[root@localhost ~]# netstat -g IPv6/IPv4 Group Memberships Interface RefCnt Group --------------- ------ --------------------- lo 1 all-systems.mcast.net eth3 1 all-systems.mcast.net eth4 1 all-systems.mcast.net pim6reg 1 all-systems.mcast.net lo 1 ff02::1 eth3 1 ff02::d eth3 1 ff02::16 eth3 2 ff02::1:ff00:0 eth3 2 ff02::2 eth3 1 ff02::1:ff00:1 eth3 1 ff02::1:ff2e:692 eth3 2 ff02::1 eth4 1 ff02::d eth4 1 ff02::16 eth4 1 ff02::1:ff47:aa3 eth4 2 ff02::1:ff00:0 eth4 2 ff02::2 eth4 1 ff02::1:ff00:1 eth4 1 ff02::1:ff47:aaa3 eth4 2 ff02::1 pim6reg 1 ff02::1
Kiểm tra thông tin RP đã được cấu hình đúng cho tất cả các router:
[root@R1 ~]# /usr//local/xorp/sbin/xorpsh Welcome to XORP v1.8.6-WIP on R1 Version tag: b4dde55 Build Date: 2016-07-13 02:09 64-bit root@R1> show pim6 rps RP Type Pri Holdtime Timeout ActiveGroups GroupPrefix fec2::2 static 192 -1 -1 0 ff00::/8
Kiểm tra các DR trên từng router:
root@R1> show pim6 interface Interface State Mode V PIMstate Priority DRaddr Neighbors eth3 UP Sparse 2 DR 2 fe80::a00:27ff:fe2e:e103 0 eth4 UP Sparse 2 DR 2 fe80::a00:27ff:fe47:e104 1 register_vif UP Sparse 2 DR 1 fe80::a00:27ff:fe2e:e103 0
Bước 2: Cấu hình XORP với phương pháp RP động dựa trên bootstrap
Trong phương phát trên, RP được cấu hình tĩnh trên tất cả các router multicast của mạng. Cài đặt PIM trong XORP cho phép các router tự động lựa chọn RP theo một số tiêu chí ưu tiên. Quá trình lựa chọn RP được thực hiện thông qua một thủ tục gọi là bootstrap. File cấu hình của các router được sửa đổi để kích hoạt bootstrap:
protocols { pimsm6 { interface eth3 { vif eth3 { disable: false dr-priority: 2 } } interface eth4 { vif eth4 { dr-priority: 2 disable: false } } interface register_vif { vif register_vif { /* Note: this vif should be always enabled */ disable: false } } /* Note: static-rps and bootstrap should not be mixed */ /* static-rps { rp fec2::2 { group-prefix ff00::/8 { } } } */ bootstrap { disable: false cand-bsr { scope-zone ff00::/8 { cand-bsr-by-vif-name: "eth3" bsr-priority: 128 hash-mask-len: 30 } } cand-rp { group-prefix ff00::/8 { cand-rp-by-vif-name: "eth3" rp-priority: 193 rp-holdtime: 150 } } } } }
Trong file cấu hình này, mục static-rps được khóa lại. Thay vào đó, mỗi router có thể tự tham gia vào thủ tục bootstrap với tư cách là một ứng cử bootstrap hoặc một ứng cử RP hoặc cả hai. Các router ứng cử bootstrap trao đổi thông tin và dựa theo các tham số ưu tiên của mình để xác định bootstrap được lựa chọn làm người thực hiện lựa chọn RP. Sau khi khởi động các router XORP với file cấu hình sử dụng bootstrap, có thể kiểm tra kết quả quá trình lựa chọn bootstrap router từ các ứng viên (candidate) và lựa chọn RP từ các ứng viên.
[root@R2 ~]# /usr/local/xorp/sbin/xorpsh Welcome to XORP v1.8.6-WIP on R2 Version tag: b4dde55 Build Date: 2016-07-13 02:09 64-bit root@R2> show pim6 rps RP Type Pri Holdtime Timeout ActiveGroups GroupPrefix fec3::2 bootstrap 170 150 142 0 ff00::/8 fec2::2 bootstrap 195 150 142 0 ff00::/8 fec1::2 bootstrap 190 150 142 0 ff00::/8 fec0::1 bootstrap 193 150 142 0 ff00::/8 root@R2> show pim6 bootstrap Active zones: BSR Pri LocalAddress Pri State Timeout SZTimeout fec3::2 130 fec1::2 128 Candidate 110 -1 Expiring zones: BSR Pri LocalAddress Pri State Timeout SZTimeout Configured zones: BSR Pri LocalAddress Pri State Timeout SZTimeout fec1::2 128 fec1::2 128 Init -1 -1
Bước 3: Sử dụng ssmping để kiểm tra kết nối multicast
Đây là bộ công cụ để hỗ trợ test multicast. Phương pháp hoạt động của nó tương tự như ping. Một trạm chạy tiến trình ssmpingd có chức năng như server chờ kết nối từ client đến và phát trả lời theo 2 hướng: nunicast trực tiếp về máy client và multicast đến địa chỉ ff3e::4321:1234. Tại các máy client cần chạy chương trình ssmping để kết nối đến server đồng thời join vào địa chỉ multicast ff3e::4321:1234. Nếu thiết lập multicast giữa client và server thành công, client sẽ nhận được 2 thông điệp gửi từ server, một theo kiểu unicast (giống hệt lệnh ping) và một thông qua địa chỉ multicast ff3e::4321:1234.
Trên các máy trạm, thực hiện các lệnh cài đặt gói ssmping:
[root@localhost ~]# yum install wget . . . [root@localhost ~]# wget http://ftp.pbone.net/mirror/ftp.pramberger.at/systems/linux/contrib/rhel6/x86_64/ssmping-0.9.1-1.el6.pp.x86_64.rpm . . . [root@localhost ~]# rpm -Uvh ./ssmping-0.9.1-1.el6.pp.x86_64.rpm
Tại máy client C2, thực hiện chạy tiến trình ssmpingd để chờ các trạm liên lạc đến.
[root@C2 ~]# ssmpingd
Tiến trình này sẽ chưa làm gì cho đến khi nó nhận được kết nối từ một client chạy ssmping. Có thể kiểm tra trên wireshark không xuất hiện các thông điệp PIM xuất phát từ ssmpingd.
Tại client C4, chạy ssmping để kết nối đến client C2. Kết quả cho thấy đã nhận được các gói tin ping gửi từ C2 về bằng 2 đường unicast và multicast:
[root@C4 ~]# ssmping -c 3 fec2::7 ssmping joined (S,G) = (fec2::7,ff3e::4321:1234) pinging S from 2000::7 unicast from fec2::7, seq=1 dist=3 time=3.607 ms multicast from fec2::7, seq=2 dist=2 time=1.034 ms unicast from fec2::7, seq=2 dist=3 time=1.259 ms unicast from fec2::7, seq=3 dist=3 time=2.692 ms multicast from fec2::7, seq=3 dist=2 time=2.655 ms --- fec2::7 statistics --- 3 packets transmitted, time 3001 ms unicast: 3 packets received, 0% packet loss rtt min/avg/max/std-dev = 1.259/2.519/3.607/0.967 ms multicast: 2 packets received, 0% packet loss since first mc packet (seq 2) recvd rtt min/avg/max/std-dev = 1.034/1.844/2.655/0.811 ms
Trên máy C2, tiến trình ssmpingd cũng hiển thị các thông tin do kết nối cừ C4 tạo ra:
[root@C2 ~]# ssmpingd received request from 2000::7 received request from 2000::7 received request from 2000::7
Kiểm tra thêm một kết nối multicast từ C0 đến C2. Kết quả cũng cho thấy đã nhận được các gói tin ping gửi từ C2 về bằng 2 đường unicast và multicast:
[root@C0 ~]# ssmping -c 3 fec2::7 ssmping joined (S,G) = (fec2::7,ff3e::4321:1234) pinging S from fec0::7 unicast from fec2::7, seq=1 dist=2 time=2.979 ms unicast from fec2::7, seq=2 dist=2 time=2.217 ms multicast from fec2::7, seq=2 dist=2 time=5.409 ms unicast from fec2::7, seq=3 dist=2 time=1.396 ms multicast from fec2::7, seq=3 dist=2 time=1.670 ms --- fec2::7 statistics --- 3 packets transmitted, time 3001 ms unicast: 3 packets received, 0% packet loss rtt min/avg/max/std-dev = 1.396/2.197/2.979/0.647 ms multicast: 2 packets received, 0% packet loss since first mc packet (seq 2) recvd rtt min/avg/max/std-dev = 1.670/3.539/5.409/1.870 ms