Bài 5: Mobile IPv6
Hệ thống Mobile IPv6 được thiết lập như hình vẽ bên trên. MN ban đầu kết nối trong Home Network fec2::/64 và có HoA fec2::8. MN di chuyển qua các mạng lạ fec3::/64 rồi đến 2000::/64. Tại mỗi mạng lạ này, MN được tự động gán cho địa chỉ CoA tương ứng. Mỗi khi nhận được CoA mới trong mạng lạ, MN thực hiện thủ tục binding update với HA của mình là router R3 có địa chỉ fec2::2. Đường hầm được thiết lập giữa HA (fec2::2) đến các CoA của MN và duy trì kết nối giữa MN với các CN (C3 hay C4). Các bước thực hiện như sau:
- Bước 1: Thiết lập hệ thống mạng chuẩn bị cho Mobile IPv6.
- Bước 2: Thiếp lập cơ chế gán địa chỉ tự động tại các mạng lạ.
- Bước 3: Cấu hình Mobile IPv6 trên HA và MN.
- Bước 4: Tiến hành kịch bản di chuyển MN.
- Bước 5: Sử dụng cơ chế bảo mật IPSec cho đường hầm giữa HA và MN.
Bước 1: Thiết lập hệ thống mạng chuẩn bị cho Mobile IPv6
Tham khảo các bài thực hành số 1 để thiết lập mạng tĩnh, bao gồm các router và các trạm cố định (C3 & C4). Kiểm tra kết nối thông suốt giữa các trạm và các router bằng lệnh ping. Chú ý kiểm tra kết nối từ các mạng lạ về HA để đảm bảo khi MN di chuyển đến các mạng lạ này thì nó kết nối được về HA của mình là R2.
[root@R3 ~]# ifconfig -a eth3 Link encap:Ethernet HWaddr 08:00:27:E1:E3:03 inet addr:192.168.2.2 Bcast:192.168.2.255 Mask:255.255.255.0 inet6 addr: fec2::2/64 Scope:Site inet6 addr: fe80::a00:27ff:fee1:e303/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:375643 errors:0 dropped:0 overruns:0 frame:0 TX packets:800984 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:41017989 (39.1 MiB) TX bytes:979085147 (933.7 MiB) eth4 Link encap:Ethernet HWaddr 08:00:27:7D:E3:04 inet6 addr: fec3::1/64 Scope:Site inet6 addr: fe80::a00:27ff:fe7d:e304/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:605740 errors:0 dropped:0 overruns:0 frame:0 TX packets:294651 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:778065509 (742.0 MiB) TX bytes:30891171 (29.4 MiB) [root@R3 ~]# ip -6 route 2000::/64 via fec3::2 dev eth4 metric 1024 mtu 1500 fe80::/64 dev eth3 proto kernel metric 256 mtu 1500 fe80::/64 dev eth4 proto kernel metric 256 mtu 1500 fec0::/64 via fec2::1 dev eth3 proto static metric 1024 mtu 1500 fec1::/64 via fec2::1 dev eth3 proto static metric 1024 mtu 1500 fec2::/64 dev eth3 proto kernel metric 256 mtu 1500 fec3::/64 dev eth4 proto kernel metric 256 mtu 1500 fec4::/64 via fec3::2 dev eth4 metric 1024 mtu 1500 default via fec3::2 dev eth4 metric 1024 mtu 1500
[root@R4 ~]# ifconfig -a eth3 Link encap:Ethernet HWaddr 08:00:27:40:E4:03 inet addr:192.168.3.2 Bcast:192.168.3.255 Mask:255.255.255.0 inet6 addr: fec3::2/64 Scope:Site inet6 addr: fe80::a00:27ff:fe40:e403/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:307283 errors:0 dropped:0 overruns:0 frame:0 TX packets:613810 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:32574044 (31.0 MiB) TX bytes:779436370 (743.3 MiB) eth4 Link encap:Ethernet HWaddr 08:00:27:97:E4:04 inet addr:203.162.5.11 Bcast:203.162.5.255 Mask:255.255.255.0 inet6 addr: 2000::1/64 Scope:Global inet6 addr: fe80::a00:27ff:fe97:e404/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:11296 errors:0 dropped:0 overruns:0 frame:0 TX packets:19380 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1772285 (1.6 MiB) TX bytes:2156417 (2.0 MiB) [root@R4 ~]# ip -6 route 2000::/64 dev eth4 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 4294967295 fe80::/64 dev eth3 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 4294967295 fe80::/64 dev eth4 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 4294967295 fec0::/64 via fec3::1 dev eth3 metric 1024 mtu 1500 advmss 1440 hoplimit 4294967295 fec1::/64 via fec3::1 dev eth3 metric 1024 mtu 1500 advmss 1440 hoplimit 4294967295 fec2::/64 via fec3::1 dev eth3 metric 1024 mtu 1500 advmss 1440 hoplimit 4294967295 fec3::/64 dev eth3 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 4294967295
Bước 2: Thiếp lập cơ chế gán địa chỉ tự động tại các mạng lạ
Khi MN di chuyển vào các mạng lạ, nó cần nhận được các thông tin cấu hình địa chỉ để thiết lập CoA cho mình. IPv6 cung cấp nhiều cách gán địa chỉ động cho các trạm trong mạng. Ở đây ta sẽ dùng cơ chế Stateless Address Autoconfiguration (SLAAC). Có chế này dựa trên giao thức Neighbor Discovery (tham khảo mục 7.3.1: Neighbor Discovery) được gửi từ router đến các trạm trong mạng và qua đó tự động gán địa chỉ cho các trạm một cách phù hợp với tiền tố (prefix) của mạng. Tiến trình radvd trên Linux đảm nhiệm chức năng này. Cần cài đặt radvd trên các router R3 và R4 của các mạng lạ fec3::/64 và 2000::/64, chuẩn bị các file cấu hình /etc/radvd.conf và khởi động tiến trình radvd với lệnh service:
[root@R3 ~]# yum install radvd . . . [root@R3 ~]# cat /etc/radvd.conf interface eth4 { AdvSendAdvert on; MinRtrAdvInterval 30; MaxRtrAdvInterval 100; prefix fec3::1/64 { AdvOnLink on; AdvAutonomous on; AdvRouterAddr off; }; }; [root@R3 ~]# service radvd start Starting radvd: [ OK ]
[root@R4 ~]# yum install radvd . . . [root@R4 ~]# cat /etc/radvd.conf interface eth4 { AdvSendAdvert on; MinRtrAdvInterval 30; MaxRtrAdvInterval 100; prefix 2000::1/64 { AdvOnLink on; AdvAutonomous on; AdvRouterAddr off; }; }; [root@R4 ~]# service radvd start Starting radvd: [ OK ]
Lưu ý rằng trong sơ đồ kết nối trên, R3 đóng vai trò là HA (theo kết nối eth3 với địa chỉ fec2::2), đồng thời đóng vai trò là router quảng bá thông điệp Neighbor Discovery trong mạng lạ (theo kết nối eth4 với địa chỉ fec3::1). Khi MN kết nối vào mạng lạ, nó sẽ tự động nhận được CoA tương ứng. Để đảm bảo kịch bản Mobile IPv6 chạy thông suốt, MN trong mỗi mạng lạ phải kết nối được với HA của mình, và ngược lại, HA phải kết nối được đến MN tại địa chỉ CoA. Cần kiểm tra các điều kiện này:
[root@MN ~]# ifconfig -a enp0s8: flags=416 UP,BROADCAST,RUNNING,MULTICAST mtu 1500 inet6 fe80::a00:27ff:fe4b:5d5c prefixlen 64 scopeid 0x20 inet6 2000::a00:27ff:fe4b:5d5c prefixlen 64 scopeid 0x0ether 08:00:27:4b:5d:5c txqueuelen 1000 (Ethernet) RX packets 172 bytes 17528 (17.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 134 bytes 14848 (14.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@MN ~]# ping6 -c 3 fec2::2 PING fec2::2(fec2::2) 56 data bytes 64 bytes from fec2::2: icmp_seq=1 ttl=63 time=5.82 ms 64 bytes from fec2::2: icmp_seq=2 ttl=63 time=2.73 ms 64 bytes from fec2::2: icmp_seq=3 ttl=63 time=1.71 ms --- fec2::2 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2004ms rtt min/avg/max/mdev = 1.715/3.426/5.828/1.749 ms
Trường hợp chưa thấy MN được gán địa chỉ CoA, một lý do có thể là các thông điệp Neighbor Discovery gửi định kỳ từ router đến các trạm hiện chưa được thực hiện. Để cưỡng bức các router này gửi thông điệp Neighbor Discovery, có thể khởi động lại tiến trình radvd trên các router của mạng lạ bằng lệnh service radvd restart và kiểm tra CoA của MN.
Tại HA (R3), thực hiện ping để kiểm tra kết nối đến MN:
Bước 3: Cấu hình Mobile IPv6 trên HA và MN
Vận hành Mobile IPv6 trông Linux được tiến trình mip6d đảm nhiệm. Cần cài đặt mip6d trên HA (R3) và chuẩn bị file cấu hình:
Các thông số trong file cấu hình có thể được tham khảo trong trang man (manual) của mip6d.conf . Có một điểm chú ý là kịch bản Mobile IPv6 với đường hầm từ HA đến MN có thể được triển khai theo cơ chế bảo mật (bằng IPSec) hoặc không bảo mật (các gói tin IPv6 được bọc trong một gói IPv6 khác ở dạng clear text và chuyển qua đường hầm chạy trên Internet). Trong file cấu hình bên trên, tham số UseMnHaIPsec được đặt là disabled có nghĩa là cơ chế đường hầm không bảo mật được áp dụng.
Trên MN, tiến trình mip6d cũng được sử dụng nhưng file cấu hình cần được thiếp lập với thông số NodeConfig là MN. Do HA được khai báo sử dụng cơ chế đường hầm không bảo mật, MN cũng được khai báo tương tự với tham số UseMnHaIPsec:
[root@MN ~]# cat ./mip6d.conf NodeConfig MN; DebugLevel 10; Interface "enp0s8"; MnRouterProbes 1; MobRtrUseExplicitMode enabled; MnHomeLink "enp0s8" { IsMobRtr enabled; HomeAgentAddress fec2::2; HomeAddress fec2::8/64; } UseMnHaIPsec disabled;
Lưu ý rằng tại thời điểm kịch bản Mobile IPv6 này được thiết lập, CentOS6 gặp lỗi hệ thống khi kết nối đường hầm với HA. Do vậy, riêng MN cần được thiết lập với CentOS7. Nếu cài đặt kịch bản với các phiên bản Linux khác hoặc CentOS phiên bản sau này, cần kiểm tra tính tương thích giữa mip6d với hệ điều hành MN và HA.
Bước 4: Tiến hành kịch bản di động
Trên HA, khởi động dịch vụ mip6d với file cấu hình đã chuẩn bị:
Trên các router của các mạng lạ, khởi động dịch vụ radvd để sẵn sàng cung cấp địa chỉ CoA cho MN. Trên MN, khởi động tiến trình mip6d với file cấu hình đã chuẩn bị:
Sau khi khởi động, mip6d trên MN đợi nhận các thông điệp Neighbor Discovery gửi từ router theo kết nối enp0s8 đã được khai báo trong file cấu hình. Khi MN kết nối vào mạng lạ, nó nhận được CoA và lập tức thực hiện thủ tục binding update về HA:
Trên HA, thông tin log của mip6d cũng cho thấy đã có một MN gửi yêu cầu binding update:
Sau khi hoàn thành thủ tục binding update, trên MN xuất hiện một kết nối mạng ảo ip6tnl1 có địa chỉ bằng HoA (fec2::8) để thực hiện nhận các gói tin chuyển từ HA qua đường hầm đến MN. Bảng routing cũng được tự động cập nhật:
[root@MN ~]# ifconfig -a enp0s8: flags=4163 UP,BROADCAST,RUNNING,MULTICAST mtu 1500 inet6 fe80::a00:27ff:fe4b:5d5c prefixlen 64 scopeid 0x20 inet6 2000::a00:27ff:fe4b:5d5c prefixlen 64 scopeid 0x0ether 08:00:27:4b:5d:5c txqueuelen 1000 (Ethernet) RX packets 253 bytes 26046 (25.4 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 207 bytes 20250 (19.7 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ip6tnl1: flags=209 UP,POINTOPOINT,RUNNING,NOARP mtu 1460 inet6 fe80::a00:27ff:fe0b:bc9d prefixlen 64 scopeid 0x20 inet6 fec2::8 prefixlen 128 scopeid 0x40 unspec FE-C2-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 0 (UNSPEC) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@MN ~]# ip -6 route 2000::/64 dev enp0s8 proto static metric 1 2000::/64 dev enp0s8 proto kernel metric 256 expires 86392sec fe80::/64 dev enp0s10 proto kernel metric 256 fe80::/64 dev enp0s3 proto kernel metric 256 fe80::/64 dev ip6tnl1 proto kernel metric 256 fe80::/64 dev enp0s8 proto kernel metric 256 fec2::8 dev ip6tnl1 proto kernel metric 256 default via fe80::a00:27ff:fe97:e404 dev enp0s8 proto ra metric 1023 default via fe80::a00:27ff:fe97:e404 dev enp0s8 proto static metric 1024
Bước 5: Sử dụng đường hầm bảo mật IPSec
Trong bước 4, đường hầm đã được thiết lập giữa HA và MN nhưng các gói tin truyền trong đường hầm này không được bảo mật. Để áp dụng qui tắc IPSec cho đường hầm, cấu hình mip6d trên HA được cập nhật lại với các thông số liên quan đến IPSec:
[root@R3 ~]# cat ./mip6d-2.conf NodeConfig HA; DebugLevel 10; DoRouteOptimizationCN disabled; Interface "eth3"; HaAcceptMobRtr enabled; HaServedPrefix fec2::/64; DefaultBindingAclPolicy deny; BindingAclPolicy fec2::8 allow; UseMnHaIPsec enabled; KeyMngMobCapability disabled; # IPsec Security Policies information IPsecPolicySet { HomeAgentAddress fec2::2; HomeAddress fec2::8/64; # All MH packets (BU/BA/BERR) IPsecPolicy Mh UseESP 11 12; # All tunneled packets (HoTI/HoT, payload) IPsecPolicy TunnelPayload UseESP 13 14; # All ICMP packets (MPS/MPA, ICMPv6) IPsecPolicy ICMP UseESP 15 16; }
So sánh với file cấu hình của HA trong bước 4, file cấu hình này có thông số UseMnHaIPsec được thiết lập giá trị enabled. Đi kèm với nó, IPSec cần một số thông tin cấu hình ban đâu. Để cho đơn giản, thủ tục trao đổi và thiết lập khóa giữa các trạm HA, MN không được sử dụng (KeyMngMobCapability = disabled). Thay vào đó là các khóa được chia sẻ sẵn (cơ chế shared key) và chính sách bảo mật được khai báo trong khối IPsecPolicySet (tham khảo chương 6, phần 6.2.1: Kiến trúc IPSec để nắm được vai trò của các thiết lập chính sách bảo mật). Sau khi khởi động mip6d trên HA với file cấu hình mới, có thể sử dụng lệnh setkey -DP để kiểm tra cơ sở dữ liệu chính sách bảo mật trên HA:
[root@R3 ~]# setkey -DP fec2::2 fec2::8 ipv6-icmp out prio high + 1073741819 ipsec esp/transport//unique:16 created: Aug 25 13:48:12 2016 lastused: lifetime: 0(s) validtime: 0(s) spid=1273 seq=1 pid=15571 refcnt=1 fec2::8 fec2::2 ipv6-icmp in prio high + 1073741819 ipsec esp/transport//unique:15 created: Aug 25 13:48:12 2016 lastused: lifetime: 0(s) validtime: 0(s) spid=1264 seq=2 pid=15571 refcnt=1 fec2::2 fec2::8 135 out prio high + 1073741822 ipsec esp/transport//unique:12 created: Aug 25 13:48:12 2016 lastused: lifetime: 0(s) validtime: 0(s) spid=1257 seq=3 pid=15571 refcnt=1 fec2::8 fec2::2 135 in prio high + 1073741822 ipsec esp/transport//unique:11 created: Aug 25 13:48:12 2016 lastused: Aug 25 13:48:22 2016 lifetime: 0(s) validtime: 0(s) spid=1248 seq=0 pid=15571 refcnt=1
Trên MN, các chính sách bảo mật cũng được khai báo với thông số giống hệt trên HA. Một điểm cần lưu ý là khi sử dụng cơ chế đường hầm bảo mật, qui tắc tối ưu chuyển tiếp gói tin tại MN sẽ không được thực hiện (tham số DoRouteOptimizationMN = disabled).
[root@MN ~]# cat ./mip6d.conf NodeConfig MN; DebugLevel 10; DoRouteOptimizationMN disabled; Interface "enp0s8"; MnRouterProbes 1; MobRtrUseExplicitMode enabled; MnHomeLink "enp0s8" { IsMobRtr enabled; HomeAgentAddress fec2::2; HomeAddress fec2::8/64; } UseMnHaIPsec enabled; KeyMngMobCapability disabled; # IPsec Security Policies information IPsecPolicySet { HomeAgentAddress fec2::2; HomeAddress fec2::8/64; # All MH packets (BU/BA/BERR) IPsecPolicy Mh UseESP 11 12; # All tunneled packets (HoTI/HoT, payload) IPsecPolicy TunnelPayload UseESP 13 14; # All ICMP packets (MPS/MPA, ICMPv6) IPsecPolicy ICMP UseESP 15 16; }
Khi chạy tiến trình mip6d trên MN, các chính sách bảo mật IPSec cũng được cập nhật và có thể kiểm tra bằng lệnh setkey -DP. Hiện nhiên là chính sách này phải giống hệt như chính sách bảo mật trên HA:
[root@MN ~]# setkey -DP fec2::8[any] ::/0[any] 255 out prio high + 1073741814 ipsec esp/tunnel/2000::a00:27ff:fe4b:5d5c-fec2::2/unique:13 created: Aug 25 14:10:04 2016 lastused: lifetime: 0(s) validtime: 0(s) spid=1201 seq=1 pid=2951 refcnt=1 ::/0[any] fec2::8[any] 255 in prio high + 1073741814 ipsec esp/tunnel/fec2::2-2000::a00:27ff:fe4b:5d5c/unique:14 created: Aug 25 14:10:04 2016 lastused: lifetime: 0(s) validtime: 0(s) spid=1192 seq=2 pid=2951 refcnt=1 fec2::8 fec2::2 ipv6-icmp out prio high + 1073741819 ipsec esp/transport//unique:15 created: Aug 25 14:10:04 2016 lastused: lifetime: 0(s) validtime: 0(s) spid=1129 seq=3 pid=2951 refcnt=1 fec2::2 fec2::8 ipv6-icmp in prio high + 1073741819 ipsec esp/transport//unique:16 created: Aug 25 14:10:04 2016 lastused: lifetime: 0(s) validtime: 0(s) spid=1120 seq=4 pid=2951 refcnt=1 fec2::8 fec2::2 mobility-header out prio high + 1073741822 ipsec esp/transport//unique:11 created: Aug 25 14:10:04 2016 lastused: lifetime: 0(s) validtime: 0(s) spid=1113 seq=5 pid=2951 refcnt=2 fec2::2 fec2::8 mobility-header in prio high + 1073741822 ipsec esp/transport//unique:12 created: Aug 25 14:10:04 2016 lastused: lifetime: 0(s) validtime: 0(s) spid=1104 seq=6 pid=2951 refcnt=1 fec2::8 ::/0 mobility-header 5,0 out prio high + 1073741820 none created: Aug 25 14:09:44 2016 lastused: lifetime: 0(s) validtime: 0(s) spid=1097 seq=0 pid=2951 refcnt=1
Cuối cùng, khi thực thi tiến trình mip6d trên MN với cơ chế bảo mật IPSec, nếu thủ tục binding update thành công, thông tin log của mip6d cho thấy các thông số IPSec đã được áp dụng: