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 0x0
        ether 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:

[root@R3 ~]# ping6 -c 3 2000::a00:27ff:fe4b:5d5c
PING 2000::a00:27ff:fe4b:5d5c(2000::a00:27ff:fe4b:5d5c) 56 data bytes
64 bytes from 2000::a00:27ff:fe4b:5d5c: icmp_seq=1 ttl=63 time=1.60 ms
64 bytes from 2000::a00:27ff:fe4b:5d5c: icmp_seq=2 ttl=63 time=3.01 ms
64 bytes from 2000::a00:27ff:fe4b:5d5c: icmp_seq=3 ttl=63 time=1.89 ms

--- 2000::a00:27ff:fe4b:5d5c ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2006ms
rtt min/avg/max/mdev = 1.602/2.170/3.013/0.607 ms

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:

[root@R3 ~]# yum install mipv6-daemon

[root@R3 ~]# cat ./mip6d.conf
NodeConfig HA;
DebugLevel 10;
DoRouteOptimizationCN disabled;
Interface "eth3";
HaAcceptMobRtr enabled;
HaServedPrefix fec2::/64;
DefaultBindingAclPolicy deny;
BindingAclPolicy fec2::8 allow;
UseMnHaIPsec disabled;

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ị:

[root@R3 ~]# mip6d -c ./mip6d-1.conf
mip6d[15476]: MIPL Mobile IPv6 for Linux v2.0.2-umip-0.4 started (Home Agent)
Thu Aug 25 13:25:09 main: MIPL Mobile IPv6 for Linux started in debug mode, not detaching from terminal
Thu Aug 25 13:25:09 conf_show: config_file = ./mip6d-1.conf
Thu Aug 25 13:25:09 conf_show: vt_hostname = localhost
Thu Aug 25 13:25:09 conf_show: vt_service = 7777
Thu Aug 25 13:25:09 conf_show: mip6_entity = 2
Thu Aug 25 13:25:09 conf_show: debug_level = 10
Thu Aug 25 13:25:09 conf_show: debug_log_file = stderr
Thu Aug 25 13:25:09 conf_show: PolicyModulePath = [internal]
Thu Aug 25 13:25:09 conf_show: DefaultBindingAclPolicy = 129
Thu Aug 25 13:25:09 conf_show: NonVolatileBindingCache = disabled
Thu Aug 25 13:25:09 conf_show: KeyMngMobCapability = disabled
Thu Aug 25 13:25:09 conf_show: UseMnHaIPsec = disabled
Thu Aug 25 13:25:09 conf_show: MnMaxHaBindingLife = 262140
Thu Aug 25 13:25:09 conf_show: MnMaxCnBindingLife = 420
Thu Aug 25 13:25:09 conf_show: MnRouterProbes = 0
Thu Aug 25 13:25:09 conf_show: MnRouterProbeTimeout = 0.000000
Thu Aug 25 13:25:09 conf_show: InitialBindackTimeoutFirstReg = 1.500000
Thu Aug 25 13:25:09 conf_show: InitialBindackTimeoutReReg = 1.000000
Thu Aug 25 13:25:09 conf_show: UseCnBuAck = disabled
Thu Aug 25 13:25:09 conf_show: DoRouteOptimizationMN = enabled
Thu Aug 25 13:25:09 conf_show: MnUseAllInterfaces = disabled
Thu Aug 25 13:25:09 conf_show: MnDiscardHaParamProb = disabled
Thu Aug 25 13:25:09 conf_show: SendMobPfxSols = enabled
Thu Aug 25 13:25:09 conf_show: OptimisticHandoff = disabled
Thu Aug 25 13:25:09 conf_show: MobRtrUseExplicitMode = enabled
Thu Aug 25 13:25:09 conf_show: SendMobPfxAdvs = enabled
Thu Aug 25 13:25:09 conf_show: SendUnsolMobPfxAdvs = enabled
Thu Aug 25 13:25:09 conf_show: MaxMobPfxAdvInterval = 86400
Thu Aug 25 13:25:09 conf_show: MinMobPfxAdvInterval = 600
Thu Aug 25 13:25:09 conf_show: HaMaxBindingLife = 262140
Thu Aug 25 13:25:09 conf_show: HaAcceptMobRtr = enabled
Thu Aug 25 13:25:09 conf_show: DoRouteOptimizationCN = disabled
Thu Aug 25 13:25:09 xfrm_cn_init: Adding policies and states for CN
Thu Aug 25 13:25:09 xfrm_ha_init: Adding policies and states for HA

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ị:

[root@MN ~]# mip6d -c ./mip6d.conf
mip6d[2609]: MIPL Mobile IPv6 for Linux v2.0.2-umip-0.4 started (Mobile Node)
Thu Aug 25 13:27:25 main: MIPL Mobile IPv6 for Linux started in debug mode, not detaching from terminal
Thu Aug 25 13:27:25 conf_show: config_file = ./mip6d.conf
Thu Aug 25 13:27:25 conf_show: vt_hostname = localhost
Thu Aug 25 13:27:25 conf_show: vt_service = 7777
Thu Aug 25 13:27:25 conf_show: mip6_entity = 1
Thu Aug 25 13:27:25 conf_show: debug_level = 10
Thu Aug 25 13:27:25 conf_show: debug_log_file = stderr
Thu Aug 25 13:27:25 conf_show: PolicyModulePath = [internal]
Thu Aug 25 13:27:25 conf_show: DefaultBindingAclPolicy = 0
Thu Aug 25 13:27:25 conf_show: NonVolatileBindingCache = disabled
Thu Aug 25 13:27:25 conf_show: KeyMngMobCapability = disabled
Thu Aug 25 13:27:25 conf_show: UseMnHaIPsec = disabled
Thu Aug 25 13:27:25 conf_show: MnMaxHaBindingLife = 262140
Thu Aug 25 13:27:25 conf_show: MnMaxCnBindingLife = 420
Thu Aug 25 13:27:25 conf_show: MnRouterProbes = 1
Thu Aug 25 13:27:25 conf_show: MnRouterProbeTimeout = 0.000000
Thu Aug 25 13:27:25 conf_show: InitialBindackTimeoutFirstReg = 1.500000
Thu Aug 25 13:27:25 conf_show: InitialBindackTimeoutReReg = 1.000000
Thu Aug 25 13:27:25 conf_show: UseCnBuAck = disabled
Thu Aug 25 13:27:25 conf_show: DoRouteOptimizationMN = enabled
Thu Aug 25 13:27:25 conf_show: MnUseAllInterfaces = disabled
Thu Aug 25 13:27:25 conf_show: MnDiscardHaParamProb = disabled
Thu Aug 25 13:27:25 conf_show: SendMobPfxSols = enabled
Thu Aug 25 13:27:25 conf_show: OptimisticHandoff = disabled
Thu Aug 25 13:27:25 conf_show: MobRtrUseExplicitMode = enabled
Thu Aug 25 13:27:25 conf_show: SendMobPfxAdvs = enabled
Thu Aug 25 13:27:25 conf_show: SendUnsolMobPfxAdvs = enabled
Thu Aug 25 13:27:25 conf_show: MaxMobPfxAdvInterval = 86400
Thu Aug 25 13:27:25 conf_show: MinMobPfxAdvInterval = 600
Thu Aug 25 13:27:25 conf_show: HaMaxBindingLife = 262140
Thu Aug 25 13:27:25 conf_show: HaAcceptMobRtr = disabled
Thu Aug 25 13:27:25 conf_show: DoRouteOptimizationCN = enabled
Thu Aug 25 13:27:25 xfrm_cn_init: Adding policies and states for CN
Thu Aug 25 13:27:25 xfrm_mn_init: Adding policies and states for MN
Thu Aug 25 13:27:25 conf_home_addr_info: HoA address fec2:0:0:0:0:0:0:8
Thu Aug 25 13:27:25 conf_home_addr_info: is Mobile Router
Thu Aug 25 13:27:25 conf_home_addr_info: HA address fec2:0:0:0:0:0:0:2
Thu Aug 25 13:27:25 __tunnel_add: created tunnel ip6tnl1 (8) from fec2:0:0:0:0:0:0:8 to fec2:0:0:0:0:0:0:2 user count 1
Thu Aug 25 13:27:25 conf_home_addr_info: Home address fec2:0:0:0:0:0:0:8
Thu Aug 25 13:27:25 flag_hoa: set HoA fec2:0:0:0:0:0:0:8/128 iif 8 flags 12 preferred_time 4294967295 valid_time 4294967295
Thu Aug 25 13:27:25 conf_home_addr_info: Added new home_addr_info successfully
mip6d[2609]: Interface 1 (lo):type 772 unsupported
Thu Aug 25 13:27:25 __md_discover_router: discover link on iface enp0s8 (3)
Thu Aug 25 13:27:29 __md_discover_router: discover link on iface enp0s8 (3)
Thu Aug 25 13:27:33 __md_discover_router: discover link on iface enp0s8 (3)

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:

Thu Aug 25 13:30:21 __md_discover_router: discover link on iface enp0s8 (3)
Thu Aug 25 13:30:25 __md_discover_router: discover link on iface enp0s8 (3)
Thu Aug 25 13:30:26 md_change_default_router: add new router fe80:0:0:0:a00:27ff:fe97:e404 on interface enp0s8 (3)
Thu Aug 25 13:30:26 md_update_router_stats: Adding CoA 2000:0:0:0:a00:27ff:fe4b:5d5c on interface (3)
Thu Aug 25 13:30:26 mn_move: 1775
Thu Aug 25 13:30:26 mn_move: in foreign net
Thu Aug 25 13:30:26 mn_block_rule_add: blackhole is already set.
Thu Aug 25 13:30:26 mn_send_home_bu: 792
Thu Aug 25 13:30:26 mn_get_home_lifetime: CoA lifetime 86399 s, HoA lifetime 4294967295 s, BU lifetime 86396 s
Thu Aug 25 13:30:26 mn_ro_pol_add: Adding default RO triggering policies for all Correspondent Nodes
Thu Aug 25 13:30:26 process_first_home_bu: New bule for HA
Thu Aug 25 13:30:26 bul_add: Adding bule
== BUL_ENTRY ==
Home address    fec2:0:0:0:0:0:0:8
Care-of address 2000:0:0:0:a00:27ff:fe4b:5d5c
CN address      fec2:0:0:0:0:0:0:2
lifetime = 86396,  delay = 1500
flags: IP6_MH_BU_HOME IP6_MH_BU_ACK IP6_MH_BU_MR
Thu Aug 25 13:30:26 mn_send_home_bu: New bule for HA
Thu Aug 25 13:30:26 mh_send: sending MH type 5
from fec2:0:0:0:0:0:0:8
to fec2:0:0:0:0:0:0:2
Thu Aug 25 13:30:26 mh_send: local CoA 2000:0:0:0:a00:27ff:fe4b:5d5c
Thu Aug 25 13:30:26 bul_update_timer: Updating timer

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:

Thu Aug 25 13:30:28 mh_bu_parse: Binding Update Received
Thu Aug 25 13:30:28 mh_send_ba: status 132
Thu Aug 25 13:30:28 mh_send: sending MH type 6
from fec2:0:0:0:0:0:0:2
to fec2:0:0:0:0:0:0:8
Thu Aug 25 13:30:28 mh_send: remote CoA 2000:0:0:0:a00:27ff:fe4b:5d5c

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 0x0
        ether 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:

[root@MN ~]# mip6d -c ./mip6d.conf
mip6d[2981]: MIPL Mobile IPv6 for Linux v2.0.2-umip-0.4 started (Mobile Node)
Thu Aug 25 14:14:42 main: MIPL Mobile IPv6 for Linux started in debug mode, not detaching from terminal
Thu Aug 25 14:14:42 conf_show: config_file = ./mip6d-1.conf
Thu Aug 25 14:14:42 conf_show: vt_hostname = localhost
Thu Aug 25 14:14:42 conf_show: vt_service = 7777
Thu Aug 25 14:14:42 conf_show: mip6_entity = 1
Thu Aug 25 14:14:42 conf_show: debug_level = 10
Thu Aug 25 14:14:42 conf_show: debug_log_file = stderr
Thu Aug 25 14:14:42 conf_show: PolicyModulePath = [internal]
Thu Aug 25 14:14:42 conf_show: DefaultBindingAclPolicy = 0
Thu Aug 25 14:14:42 conf_show: NonVolatileBindingCache = disabled
Thu Aug 25 14:14:42 conf_show: KeyMngMobCapability = disabled
Thu Aug 25 14:14:42 conf_show: UseMnHaIPsec = enabled
Thu Aug 25 14:14:42 conf_show: MnMaxHaBindingLife = 262140
Thu Aug 25 14:14:42 conf_show: MnMaxCnBindingLife = 420
Thu Aug 25 14:14:42 conf_show: MnRouterProbes = 1
Thu Aug 25 14:14:42 conf_show: MnRouterProbeTimeout = 0.000000
Thu Aug 25 14:14:42 conf_show: InitialBindackTimeoutFirstReg = 1.500000
Thu Aug 25 14:14:42 conf_show: InitialBindackTimeoutReReg = 1.000000
Thu Aug 25 14:14:42 conf_show: UseCnBuAck = disabled
Thu Aug 25 14:14:42 conf_show: DoRouteOptimizationMN = disabled
Thu Aug 25 14:14:42 conf_show: MnUseAllInterfaces = disabled
Thu Aug 25 14:14:42 conf_show: MnDiscardHaParamProb = disabled
Thu Aug 25 14:14:42 conf_show: SendMobPfxSols = enabled
Thu Aug 25 14:14:42 conf_show: OptimisticHandoff = disabled
Thu Aug 25 14:14:42 conf_show: MobRtrUseExplicitMode = enabled
Thu Aug 25 14:14:42 conf_show: SendMobPfxAdvs = enabled
Thu Aug 25 14:14:42 conf_show: SendUnsolMobPfxAdvs = enabled
Thu Aug 25 14:14:42 conf_show: MaxMobPfxAdvInterval = 86400
Thu Aug 25 14:14:42 conf_show: MinMobPfxAdvInterval = 600
Thu Aug 25 14:14:42 conf_show: HaMaxBindingLife = 262140
Thu Aug 25 14:14:42 conf_show: HaAcceptMobRtr = disabled
Thu Aug 25 14:14:42 conf_show: DoRouteOptimizationCN = enabled
Thu Aug 25 14:14:42 xfrm_cn_init: Adding policies and states for CN
Thu Aug 25 14:14:42 xfrm_mn_init: Adding policies and states for MN
Thu Aug 25 14:14:42 conf_home_addr_info: HoA address fec2:0:0:0:0:0:0:8
Thu Aug 25 14:14:42 conf_home_addr_info: is Mobile Router
Thu Aug 25 14:14:42 conf_home_addr_info: HA address fec2:0:0:0:0:0:0:2
Thu Aug 25 14:14:42 __tunnel_add: created tunnel ip6tnl1 (12) from fec2:0:0:0:0:0:0:8 to fec2:0:0:0:0:0:0:2 user count 1
Thu Aug 25 14:14:42 conf_home_addr_info: Home address fec2:0:0:0:0:0:0:8
Thu Aug 25 14:14:42 flag_hoa: set HoA fec2:0:0:0:0:0:0:8/128 iif 12 flags 12 preferred_time 4294967295 valid_time 4294967295
Thu Aug 25 14:14:42 conf_home_addr_info: Added new home_addr_info successfully
mip6d[2981]: Interface 1 (lo):type 772 unsupported
Thu Aug 25 14:14:42 __md_discover_router: discover link on iface enp0s8 (3)
Thu Aug 25 14:14:46 __md_discover_router: discover link on iface enp0s8 (3)
Thu Aug 25 14:14:50 md_change_default_router: add new router fe80:0:0:0:a00:27ff:fe97:e404 on interface enp0s8 (3)
Thu Aug 25 14:14:50 md_update_router_stats: Adding CoA 2000:0:0:0:a00:27ff:fe4b:5d5c on interface (3)
Thu Aug 25 14:14:50 mn_move: 1775
Thu Aug 25 14:14:50 mn_move: in foreign net
Thu Aug 25 14:14:50 mn_block_rule_add: blackhole is already set.
Thu Aug 25 14:14:50 mn_send_home_bu: 792
Thu Aug 25 14:14:50 mn_get_home_lifetime: CoA lifetime 86399 s, HoA lifetime 4294967295 s, BU lifetime 86396 s
Thu Aug 25 14:14:50 process_first_home_bu: New bule for HA
Thu Aug 25 14:14:50 bul_add: Adding bule
== BUL_ENTRY ==
Home address    fec2:0:0:0:0:0:0:8
Care-of address 2000:0:0:0:a00:27ff:fe4b:5d5c
CN address      fec2:0:0:0:0:0:0:2
lifetime = 86396,  delay = 1500
flags: IP6_MH_BU_HOME IP6_MH_BU_ACK IP6_MH_BU_MR
Thu Aug 25 14:14:50 mn_send_home_bu: New bule for HA
Thu Aug 25 14:14:50 dump_migrate: ifindex       12
Thu Aug 25 14:14:50 dump_migrate: hoa   fec2:0:0:0:0:0:0:8
Thu Aug 25 14:14:50 dump_migrate: ha    fec2:0:0:0:0:0:0:2
Thu Aug 25 14:14:50 dump_migrate: ipsec ESP
Thu Aug 25 14:14:50 dump_migrate: ifindex       12
Thu Aug 25 14:14:50 dump_migrate: hoa   fec2:0:0:0:0:0:0:8
Thu Aug 25 14:14:50 dump_migrate: ha    fec2:0:0:0:0:0:0:2
Thu Aug 25 14:14:50 dump_migrate: ocoa  fec2:0:0:0:0:0:0:8
Thu Aug 25 14:14:50 dump_migrate: ncoa  2000:0:0:0:a00:27ff:fe4b:5d5c
Thu Aug 25 14:14:50 dump_migrate: ipsec ESP
Thu Aug 25 14:14:50 dump_migrate: ifindex       12
Thu Aug 25 14:14:50 dump_migrate: hoa   fec2:0:0:0:0:0:0:8
Thu Aug 25 14:14:50 dump_migrate: ha    fec2:0:0:0:0:0:0:2
Thu Aug 25 14:14:50 dump_migrate: ocoa  fec2:0:0:0:0:0:0:8
Thu Aug 25 14:14:50 dump_migrate: ncoa  2000:0:0:0:a00:27ff:fe4b:5d5c
Thu Aug 25 14:14:50 dump_migrate: ipsec ESP
Thu Aug 25 14:14:50 dump_migrate: ifindex       12
Thu Aug 25 14:14:50 dump_migrate: hoa   fec2:0:0:0:0:0:0:8
Thu Aug 25 14:14:50 dump_migrate: ha    fec2:0:0:0:0:0:0:2
Thu Aug 25 14:14:50 dump_migrate: ocoa  fec2:0:0:0:0:0:0:8
Thu Aug 25 14:14:50 dump_migrate: ncoa  2000:0:0:0:a00:27ff:fe4b:5d5c
Thu Aug 25 14:14:50 dump_migrate: ipsec ESP
Thu Aug 25 14:14:50 mh_send: sending MH type 5
from fec2:0:0:0:0:0:0:8
to fec2:0:0:0:0:0:0:2
Thu Aug 25 14:14:50 mh_send: local CoA 2000:0:0:0:a00:27ff:fe4b:5d5c
Thu Aug 25 14:14:50 bul_update_timer: Updating timer