Bài viết chuyên đề

NAT với Route-map

31/01/2018 10:18:02

Bài số 6: Chuyên đề Network Address Translation

Các kỹ thuật NAT được khảo sát trong bài viết trước đều được cấu hình tham khảo đến các ACL để chỉ ra loại lưu lượng nào trong mạng Private sẽ được tham gia NAT. Trong bài viết tuần này, chúng ta sẽ cùng nhau trao đổi về việc sử dụng route – map để chỉ ra loại lưu lượng sẽ được tham gia NAT. Sử dụng route – map sẽ cho phép chỉ ra thông tin chi tiết hơn so với ACL, và trong nhiều trường hợp, ta không thể dùng ACL mà chỉ có thể dùng route – map để thực hiện được yêu cầu đặt ra. Như thường lệ, chúng ta cùng khảo sát chủ đề của bài viết thông qua một ví dụ lab.

Sơ đồ

Hình 1 – Sơ đồ bài lab ví dụ.

Mô tả

Trên sơ đồ hình 1 là một phần của một mạng doanh nghiệp đang được đấu nối đi Internet. Để đảm bảo về vấn đề dự phòng đường truyền đi Internet, công ty thực hiện thuê hai đường Internet từ ISP1 và ISP2; trong đó, đường đi chính là theo ISP1, đường đi theo ISP2 chỉ sử dụng để dự phòng.

Khi thuê hai đường leased – line Internet này, công ty cũng được các ISP1 và ISP2 cấp cho hai địa chỉ public là 200.0.1.1/32 và 200.0.2.1/32. Đội ngũ quản trị mạng của công ty quyết định sử dụng hai IP public này để đại diện cho Server 192.168.1.2 trên môi trường Internet. Địa chỉ 200.0.1.1 sẽ được sử dụng chính thức trong điều kiện bình thường và địa chỉ 200.0.2.1 sẽ chỉ được sử dụng để đại diện cho Server khi đường Internet nối đến ISP1 bị down.

Tất cả các user còn lại trong mạng nội bộ sẽ đi Internet bằng địa chỉ IP đấu nối lên ISP1 trong điều kiện bình thường và sẽ chuyển sang sử dụng địa chỉ IP đấu nối lên ISP2 để đi Internet khi đường truyền nối lên ISP1 bị down.

Bài lab này sẽ thực hiện cấu hình trên các router để thực hiện được yêu cầu về dự phòng Internet đã nêu ra ở trên.

Thực hiện

Bước 1: Cấu hình ban đầu cho bài lab

  • Cấu hình đặt IP cho các thiết bị như được chỉ ra trên hình 1.
  • Chạy định tuyến EIGRP trên mạng Private đảm bảo mọi địa chỉ trong mạng nội bộ thấy nhau.
  • Cấu hình router Server giả lập một server trên mạng 192.168.1.0/24.
  • Cấu hình các router public ISP đảm bảo mọi địa chỉ đấu nối của vùng public thấy nhau.
  • Hai router ISP1 và ISP2 thực hiện cấp IP public về cho R2 hai địa chỉ như được chỉ ra trên hình 1.

Cấu hình

Đặt IP trên các thiết bị:

R1(config)#interface f0/0

R1(config-if)#no shutdown

R1(config-if)#ip address 192.168.1.1 255.255.255.0

R1(config-if)#exit

R1(config)#interface f0/1

R1(config-if)#no shutdown

R1(config-if)#ip address 192.168.12.1 255.255.255.0

R1(config-if)#exit

R2(config)#interface f0/1

R2(config-if)#no shutdown

R2(config-if)#ip address 192.168.12.2 255.255.255.0

R2(config-if)#exit

R2(config)#interface s0/0/0

R2(config-if)#no shutdown

R2(config-if)#ip address 100.1.1.1 255.255.255.252

R2(config-if)#exit

R2(config)#interface s0/1/0

R2(config-if)#no shutdown

R2(config-if)#ip address 100.1.2.1 255.255.255.252

R2(config-if)#exit

ISP1(config)#interface s0/0/0

ISP1(config-if)#no shutdown

ISP1(config-if)#ip address 100.1.1.2 255.255.255.252

ISP1(config-if)#exit

ISP1(config)#interface s0/1/0

ISP1(config-if)#no shutdown

ISP1(config-if)#ip address 100.1.12.1 255.255.255.252

ISP1(config-if)#exit

ISP2(config)#interface s0/0/0

ISP2(config-if)#no shutdown

ISP2(config-if)#ip address 100.1.2.2 255.255.255.252

ISP2(config-if)#exit

ISP2(config)#interface s0/1/0

ISP2(config-if)#no shutdown

ISP2(config-if)#ip address 100.1.12.2 255.255.255.252

ISP2(config-if)#exit

Cấu hình router Server:

Server(config)#interface f0/0

Server(config-if)#no shutdown

Server(config-if)#ip address 192.168.1.2 255.255.255.0

Server(config-if)#exit

Server(config)#ip route 0.0.0.0 0.0.0.0 192.168.1.1

Chạy định tuyến trong mạng nội bộ:

R1(config)#router eigrp 100

R1(config-router)#no auto-summary

R1(config-router)#network 192.168.1.0

R1(config-router)#network 192.168.12.0

R1(config-router)#exit

R2(config)#router eigrp 100

R2(config-router)#no auto-summary

R2(config-router)#network 192.168.12.0

R2(config-router)#exit

Cấu hình các router ISP cấp IP cho khách hàng:

ISP1(config)#ip route 200.0.1.1 255.255.255.255 s0/0/0

ISP2(config)#ip route 200.0.2.1 255.255.255.255 s0/0/0

Cấu hình định tuyến trên các router của vùng Public để đảm bảo các địa chỉ trên vùng Public thấy nhau. Để đơn giản, ta chọn phương thức định tuyến tĩnh.

ISP1(config)#ip route 100.1.2.0 255.255.255.252 s0/1/0

ISP1(config)#ip route 200.0.2.1 255.255.255.255 s0/1/0

ISP2(config)#ip route 100.1.1.0 255.255.255.252 s0/1/0

ISP2(config)#ip route 200.0.1.1 255.255.255.255 s0/1/0

Router R2 cần phải chỉ default – route về các ISP. Để đảm bảo mạng nội bộ luôn chọn đường đi Internet qua ISP1, ta chọn AD cho default – route theo hướng ISP1 thấp hơn AD của default – route theo hướng ISP2. Sau khi cấu hình xong default – route, ta thực hiện quảng bá default – route này vào bên trong để các thiết bị bên trong có thể đi được Internet:

R2(config)#ip route 0.0.0.0 0.0.0.0 s0/0/0 5

R2(config)#ip route 0.0.0.0 0.0.0.0 s0/1/0 10

R2(config)#router eigrp 100

R2(config-router)#redistribute static

Kiểm tra

Các router nội bộ đã hội tụ định tuyến:

R1#show ip route eigrp

D*EX 0.0.0.0/0 [170/2195456] via 192.168.12.2, 00:01:49, FastEthernet0/1

R2#show ip route eigrp

D    192.168.1.0/24 [90/307200] via 192.168.12.1, 00:18:47, FastEthernet0/1

R2 đã đi đến được các mạng thuộc R1:

R2#ping 192.168.12.1

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 192.168.12.1, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 32/43/60 ms

Success rate is 80 percent (4/5), round-trip min/avg/max = 60/65/72 ms

R2#ping 192.168.1.2

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 60/69/84 ms

Các địa chỉ public đã đi đến nhau được:

R2#ping 100.1.1.2

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 100.1.1.2, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 28/40/80 ms

R2#ping 100.1.2.2

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 100.1.2.2, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 28/37/64 ms

R2#ping 100.1.12.1

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 100.1.12.1, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 16/54/128 ms

R2#ping 100.1.12.2

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 100.1.12.2, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 92/109/144 ms

ISP1#ping 100.1.12.2

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 100.1.12.2, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 16/39/64 ms

Đến đây, chúng ta đã thực hiện xong cấu hình ban đầu cho bài lab.

Bước 2: Cấu hình NAT tĩnh cho Server

  • Cấu hình NAT tĩnh địa chỉ của Server là 192.168.1.2 thành hai địa chỉ 200.0.1.1 và 200.0.2.1 được các ISP cấp phát.
  • Trong điều kiện bình thường, Server đi Internet bằng địa chỉ 200.0.1.1. Khi đường nối đến ISP1 down, Server sẽ đi Internet bằng địa chỉ 200.0.2.1.

Cấu hình

Với yêu cầu được đặt ra, ta phải thực hiện NAT tĩnh một địa chỉ Inside local thành hai địa chỉ Inside global. Ta thử thực hiện cấu hình hai lệnh NAT tĩnh để NAT một địa chỉ bên trong thành hai địa chỉ bên ngoài theo yêu cầu ở trên:

R2(config)#interface f0/1

R2(config-if)#ip nat inside

R2(config-if)#exit

R2(config)#interface s0/0/0

R2(config-if)#ip nat outside

R2(config-if)#exit

R2(config)#interface s0/1/0

R2(config-if)#ip nat outside

R2(config-if)#exit

R2(config)#ip nat inside source static 192.168.1.2 200.0.1.1

R2(config)#ip nat inside source static 192.168.1.2 200.0.2.1

% 192.168.1.2 already mapped (192.168.1.2 -> 200.0.1.1)

Khi ta thực hiện hai câu lệnh NAT, thông báo lỗi hiện ra cho biết rằng 192.168.1.2 đã được NAT thành 200.0.1.1 và không thể NAT thành địa chỉ khác được nữa.

R2#show ip nat translations

Pro Inside global      Inside local       Outside local      Outside global

--- 200.0.1.1          192.168.1.2        ---                ---

R2#

Kết quả show bảng NAT chỉ ra rằng chỉ có một entry NAT tĩnh được chấp nhận.

Như vậy ta thấy rằng sử dụng phương pháp NAT tĩnh như đã làm trước đây không đáp ứng được yêu cầu đặt ra.

Để giải quyết được vấn đề này, chúng ta phải sử dụng NAT kèm thêm route – map. Cấu hình ở trên được hiệu chỉnh lại như sau:

R2(config)#no ip nat inside source static 192.168.1.2 200.0.1.1

R2(config)#route-map TO_ISP1

R2(config-route-map)#match interface s0/0/0

R2(config-route-map)#exit

R2(config)#route-map TO_ISP2

R2(config-route-map)#match interface s0/1/0

R2(config-route-map)#exit

R2(config)#ip nat inside source static 192.168.1.2 200.0.1.1 route-map TO_ISP1        

R2(config)#ip nat inside source static 192.168.1.2 200.0.2.1 route-map TO_ISP2 

Route – map được tham chiếu trong câu lệnh NAT đã giúp phân biệt hai mệnh đề NAT cùng một địa chỉ inside local, do đó cả hai lệnh cấu hình NAT tĩnh đã được IOS chấp nhận.

Kiểm tra

Chúng ta kiểm tra bảng NAT để xác nhận rằng cả hai mệnh đề NAT đã được cài vào bảng NAT:

R2#show ip nat translations

Pro Inside global      Inside local       Outside local      Outside global

--- 200.0.1.1          192.168.1.2        ---                ---

--- 200.0.2.1          192.168.1.2        ---                ---

Ta thấy một địa chỉ Inside local đã được NAT thành hai địa chỉ Inside global.

Tiếp theo ta kiểm tra tính dự phòng của cấu hình NAT:

Bật debug trên R2:

R2#debug ip nat

IP NAT debugging is on

Từ Server, ta thực hiện ping đến một địa chỉ public bên ngoài, ví dụ: 100.1.12.2.

Server#ping 100.1.12.2     

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 100.1.12.2, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 128/172/212 ms

Kết quả debug trên R2 cho thấy địa chỉ của Server đã được NAT thành địa chỉ Public được cấp bởi ISP1:

*Mar  1 01:41:47.543: NAT*: s=192.168.1.2->200.0.1.1, d=100.1.12.2 [5]

*Mar  1 01:41:47.687: NAT*: s=100.1.12.2, d=200.0.1.1->192.168.1.2 [5]

Bảng NAT của R2:

R2#show ip nat translations

Pro Inside global      Inside local       Outside local      Outside global

icmp 200.0.1.1:2       192.168.1.2:2      100.1.12.2:2       100.1.12.2:2

--- 200.0.1.1          192.168.1.2        ---                ---

--- 200.0.2.1          192.168.1.2        ---                ---

Trên R2, ta thử shutdown cổng nối lên ISP1 để giả lập tình huống kết nối này bị down:

R2(config)#interface s0/0/0

R2(config-if)#shutdown

R2(config-if)#exit

R2(config)#

*Mar  1 01:49:01.559: %LINK-5-CHANGED: Interface Serial0/0/0, changed state to administratively down

*Mar  1 01:49:02.559: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial0/0/0, changed state to down

Lúc này R2 đã chọn lại default – route theo hướng ISP2:

R2#show ip route static

S*   0.0.0.0/0 is directly connected, Serial0/1/0

Như vậy, khi đường chính down, các lưu lượng sẽ được lái qua đường dự phòng. Ta cùng kiểm tra hoạt động dự phòng của NAT:

Server#ping 100.1.12.2

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 100.1.12.2, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 96/112/156 ms

Kết quả debug trên R2:

*Mar  1 01:53:02.395: NAT*: s=192.168.1.2->200.0.2.1, d=100.1.12.2 [15]

*Mar  1 01:53:02.427: NAT*: s=100.1.12.2, d=200.0.2.1->192.168.1.2 [15]

Ta thấy, lúc này địa chỉ của Server đã được chuyển đổi thành 200.0.2.1 là địa chỉ được cấp bởi ISP2.

Bảng NAT trên R2:

R2#show ip nat translations

Pro Inside global      Inside local       Outside local      Outside global

icmp 200.0.2.1:4       192.168.1.2:4      100.1.12.2:4       100.1.12.2:4

--- 200.0.1.1          192.168.1.2        ---                ---

--- 200.0.2.1          192.168.1.2        ---                ---

Ta cho cổng chính đi Internet up trở lại:

R2(config)#interface s0/0/0

R2(config-if)#no shutdown

*Mar  1 01:58:20.463: %SYS-5-CONFIG_I: Configured from console by console

*Mar  1 01:58:21.227: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial2/0, changed state to up

Lúc này, lưu lượng đi Internet từ Server sẽ chuyển lại theo hướng ISP1 và được NAT thành địa chỉ do ISP1 cung cấp:

Server#ping 100.1.12.2

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 100.1.12.2, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 156/187/268 ms

R2#

*Mar  1 02:01:15.943: NAT*: s=192.168.1.2->200.0.1.1, d=100.1.12.2 [25]

*Mar  1 02:01:16.119: NAT*: s=100.1.12.2, d=200.0.1.1->192.168.1.2 [25]

R2#show ip nat translations

Pro Inside global      Inside local       Outside local      Outside global

icmp 200.0.1.1:5       192.168.1.2:5      100.1.12.2:5       100.1.12.2:5

--- 200.0.1.1          192.168.1.2        ---                ---

--- 200.0.2.1          192.168.1.2        ---                ---

Như vậy, hoạt động public lên Internet của Server đã được đảm bảo tính dự phòng qua hai đường truyền nối lên hai ISP khác nhau.

Bước 3: Cấu hình NAT overload cho các user khác

  • Cấu hình NAT overload đảm bảo cho các user khác đi Internet. Các user đi Internet bằng cách sử dụng địa chỉ đấu nối trên các cổng của R2 lên các ISP.
  • Đảm bảo rằng trong điều kiện bình thường, các user đi Internet bằng cách NAT overload thành địa chỉ public đấu nối lên ISP1. Khi đường chính đi Internet down, các user sẽ được NAT thành địa chỉ đấu nối của R2 lên ISP2 để đi Internet.

Cấu hình

Như thường lệ, với trường hợp này, chúng ta viết một ACL bao gồm địa chỉ của tất cả các user cần đi Internet rồi NAT overload ACL này thành địa chỉ đấu nối lên ISP của router:

R2(config)#access-list 1 deny 192.168.1.2

R2(config)#access-list 1 permit any

R2(config)#ip nat inside source list 1 interface s0/0/0 overload

R2(config)#ip nat inside source list 1 interface s0/1/0 overload

Để thực hiện dự phòng, ta đã NAT ACL 1 thành địa chỉ đấu nối trên hai cổng S0/0/0 và S0/1/0. Tuy nhiên vì ta NAT cùng một list 1 thành hai cổng nên Cisco IOS sẽ chỉ giữ lại câu lệnh được khai báo sau:

R2#show run | inc ip nat

 ip nat inside

 ip nat outside

 ip nat outside

ip nat inside source list 1 interface Serial0/1/0 overload

ip nat inside source static 192.168.1.2 200.0.1.1 route-map TO_ISP1

ip nat inside source static 192.168.1.2 200.0.2.1 route-map TO_ISP2

R2#

Như vậy, nếu làm theo cách thức NAT overload bình thường chỉ tham chiếu đến ACL, ta không thể thực hiện dự phòng được. Tương tự như đã thực hiện ở bước 2, chúng ta phải tham chiếu thêm route – map trong các câu lệnh NAT để có thể có được cùng lúc hai câu lệnh NAT và từ đó thực hiện được thao tác dự phòng.

R2(config)#route-map LINK1

R2(config-route-map)#match ip address 1

R2(config-route-map)#match interface s0/0/0

R2(config-route-map)#exit

R2(config)#route-map LINK2

R2(config-route-map)#match ip address 1

R2(config-route-map)#match interface s0/1/0

R2(config-route-map)#exit

R2(config)#no ip nat inside source list 1 interface s0/1/0 overload

R2(config)#ip nat inside source route-map LINK1 interface s0/0/0 overload

R2(config)#ip nat inside source route-map LINK2 interface s0/1/0 overload

Với các route – map LINK1 và LINK2, các lưu lượng đi Internet đã được phân biệt dựa trên thông số output interface nên cả hai mệnh đề NAT đều được IOS giữ lại.

Tiếp theo, ta thực hiện các thao tác kiểm tra.

Kiểm tra

Bật debug trên router R2:

R2#debug ip nat

IP NAT debugging is on

Từ R1 thực hiện đi Internet:

R1#ping 100.1.12.2

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 100.1.12.2, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 92/118/156 ms

Kết quả debug trên R2:

*Mar  1 02:42:37.959: NAT*: s=192.168.12.1->100.1.1.1, d=100.1.12.2 [0]

*Mar  1 02:42:38.051: NAT*: s=100.1.12.2, d=100.1.1.1->192.168.12.1 [0]

Ta thấy rằng địa chỉ của R1 (192.168.12.1) đã được NAT thành địa chỉ cổng đấu nối của R2 ISP1.

Bảng NAT của R2:

R2#show ip nat translations

Pro Inside global      Inside local       Outside local      Outside global

icmp 100.1.1.1:1       192.168.12.1:1     100.1.12.2:1       100.1.12.2:1

--- 200.0.1.1          192.168.1.2        ---                ---

--- 200.0.2.1          192.168.1.2        ---                ---

Tương tự như trên, ta kiểm tra khả năng dự phòng bằng cách shutdown cổng S0/0/0 của R2 đấu lên ISP1:

R2(config)#interface s0/0/0

R2(config-if)#shutdown

R2(config-if)# 

*Mar  1 02:47:19.287: %LINK-5-CHANGED: Interface Serial0/0/0, changed state to administratively down

*Mar  1 02:47:20.287: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial0/0/0, changed state to down

Sau khi shutdown cổng, chúng ta thực hiện ping đi Internet lại từ R1:

R1#ping 100.1.12.2

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 100.1.12.2, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 60/69/96 ms

R1 vẫn đi được Internet chứng tỏ rằng dự phòng đã được thực hiện. Ta kiểm tra kết quả debug trên R2:

*Mar  1 02:48:21.195: NAT*: s=192.168.12.1->100.1.2.1, d=100.1.12.2 [10]

*Mar  1 02:48:21.259: NAT*: s=100.1.12.2, d=100.1.2.1->192.168.12.1 [10]

Ta thấy địa chỉ của R1 đã được NAT thành địa chỉ 100.1.2.1 của cổng đấu nối từ R2 lên ISP2.

Bảng NAT trên R2:

R2#show ip nat translations

Pro Inside global      Inside local       Outside local      Outside global

icmp 100.1.2.1:3       192.168.12.1:3     100.1.12.2:3       100.1.12.2:3

--- 200.0.1.1          192.168.1.2        ---                ---

--- 200.0.2.1          192.168.1.2        ---                ---

Ta mở lại cổng S0/0/0 của R2 để kiểm tra rằng các user sẽ đi Internet theo đường ISP1 và NAT thành địa chỉ đấu nối với ISP1:

R2(config)#interface s0/0/0

R2(config-if)#no shutdown

R2(config-if)#

*Mar  1 03:05:52.959: %LINK-3-UPDOWN: Interface Serial2/0, changed state to up

*Mar  1 03:05:53.963: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial2/0, changed state to up

Từ R1 thực hiện ping đi Internet:

R1#ping 100.1.12.2

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 100.1.12.2, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 92/128/156 ms

Kết quả debug và bảng NAT trên R2:

R2#

*Mar  1 03:07:48.395: NAT*: s=192.168.12.1->100.1.1.1, d=100.1.12.2 [25]

*Mar  1 03:07:48.567: NAT*: s=100.1.12.2, d=100.1.1.1->192.168.12.1 [25]

R2#show ip nat translations

Pro Inside global      Inside local       Outside local      Outside global

icmp 100.1.1.1:5       192.168.12.1:5     100.1.12.2:5       100.1.12.2:5

--- 200.0.1.1          192.168.1.2        ---                ---

--- 200.0.2.1          192.168.1.2        ---                ---

Ta thấy rằng các user đã chuyển qua đi Internet lại theo đường chính và được NAT thành địa chỉ đấu nối từ R2 lên ISP1, đúng như yêu cầu đặt ra.

Trên đây, chúng ta đã cùng nhau khảo sát cách thực hiện NAT có tham chiếu đến route – map để thực hiện thao tác dự phòng khi router biên có nhiều đường đấu nối lên các ISP khác nhau. Bài viết này đã kết thúc chuỗi bài viết về chuyên đề NAT trên Cisco IOS đã được trình bày trong thời gian gần đây trên trang của WAREN.

TRUNG TÂM WAREN