Bài viết chuyên đề

Dynamic NAT

15/01/2018 10:03:45

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

Trong bài viết trước, chúng ta đã cùng nhau khảo sát về kỹ thuật Static NAT. Trong bài viết này, chúng ta sẽ tiếp tục khảo sát về kỹ thuật Dynamic NAT.

Như đã đề cập trong phần lý thuyết tổng quan, Dynamic NAT cũng là một phương thức NAT one – to – one giống như Static NAT, tuy nhiên Dynamic NAT thực hiện NAT các địa chỉ từ bên trong ra bên ngoài một cách tự động, không giữ cố định các cặp địa chỉ cần NAT trong bảng NAT như với Static NAT.  Việc khảo sát, giống như thường lệ, được tiến hành thông qua một ví dụ lab cấu hình.

Sơ đồ:

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

Mô tả

Sơ đồ mạng ở hình 1 là một phần của một mạng doanh nghiệp sẽ được triển khai Dynamic NAT. Trên sơ đồ này:

  • R1 và R2 là hai router đại diện cho hai chi nhánh của doanh nghiệp đang được kết nối với nhau thông qua một kết nối Metronet. Subnet sử dụng trên kết nối này là 192.168.12.0/30, phía R1 sử dụng địa chỉ .1 và phía R2 sử dụng địa chỉ .2.
  • Trên chi nhánh R1, VLAN 10 được sử dụng để đặt một số server nội bộ dành riêng cho các user thuộc VLAN 20. Quy hoạch IP cho các VLAN 10 và 20 được chỉ ra như trên hình 1.

Để đảm bảo chắc chắn chỉ có các user thuộc VLAN 20 được phép truy nhập vào các server thuộc VLAN 10, trên R1 thực hiện đặt một ACL trên cổng F0/0 theo chiều out, chỉ cho phép các gói tin xuất phát từ subnet 192.168.20.0/24 của VLAN 20 được đi ra khỏi cổng F0/0 để đi đến VLAN 10 và cấm tất cả các traffic khác.

  • Về phía chi nhánh 2, router R2 được cấu hình thành một DHCP server cấp IP xuống cho các user thuộc VLAN 20. Các user thuộc VLAN 20 sẽ nhận IP động từ DHCP Server R2.
  • Router R1 và R2 chạy định tuyến EIGRP đảm bảo mọi địa chỉ thuộc hai chi nhánh thấy nhau.
  • Router Server giả lập một server đặt tại VLAN 10, lấy địa chỉ là 192.168.10.2; router Client giả lập một client của VLAN 20, địa chỉ IP sẽ được cấp phát động bằng DHCP từ R2.

Do cần thực hiện chính sách mới về quy hoạch IP, VLAN 20 của chi nhánh R2 cần phải được chuyển đổi subnet IP thành subnet 192.168.2.0/24 thay cho subnet 192.168.20/0/24 cũ. Tuy nhiên, vì một số lý do về chính sách quản lý, tại thời điểm hiện tại, router R1 chưa được phép thay đổi cấu hình hiện có. Điều này dẫn đến nếu thay đổi IP trên VLAN 20 của R2, VLAN 20 sẽ không thể truy nhập đến các server đặt tại VLAN 10 được nữa vì dải IP mới không match với dải IP được permit trong ACL đặt trên cổng F0/0 của R1.

Giải pháp được đưa ra là thực hiện NAT trên R2 để VLAN 20 sau khi thực hiện chuyển đổi IP xong vẫn có thể truy nhập vào được các server dành cho mình đặt tại VLAN 10 mà không cần phải thay đổi bất kỳ điều gì trên cấu hình của R1.

Thực hiện

Bước 1: Cấu hình ban đầu

Cấu hình các thiết bị trên sơ đồ lab để xây dựng mô hình mạng đã mô tả ở trên:

  • Đặt IP trên các thiết bị như chỉ ra trên hình 1.
  • R1 và R2 thực hiện chạy định tuyến EIGRP với nhau.
  • Trên R2 cấu hình DHCP server cấp IP cho VLAN 20.
  • Cấu hình địa chỉ IP cho các router Server và Client như mô tả trên sơ đồ.
  • Viết một ACL outbound trên cổng F0/0 của R1 chỉ cho phép lưu lượng xuất phát từ subnet 192.168.20.0/24 được đi ra khỏi cổng.

Cấu hình

Trên R1:

R1(config)#interface f0/0

R1(config-if)#no shutdown

R1(config-if)#ip address 192.168.10.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.252

R1(config-if)#exit

R1(config)#router eigrp 100

R1(config-router)#no auto-summary

R1(config-router)#network 192.168.12.0

R1(config-router)#network 192.168.10.0

R1(config-router)#exit

 

R1(config)#access-list 1 permit 192.168.20.0 0.0.0.255

R1(config)#interface f0/0

R1(config-if)#ip access-group 1 out

R1(config-if)#exit

Trên R2:

R2(config)#interface f0/1

R2(config-if)#no shutdown

R2(config-if)#ip address 192.168.12.2 255.255.255.252

R2(config-if)#exit

R2(config)#interface f0/0

R2(config-if)#no shutdown

R2(config-if)#ip address 192.168.20.1 255.255.255.0

R2(config-if)#exit

R2(config)#router eigrp 100

R2(config-router)#no auto-summary

R2(config-router)#network 192.168.12.0

R2(config-router)#network 192.168.20.0

R2(config-router)#exit

R2(config)#ip dhcp pool VLAN20

R2(dhcp-config)#network 192.168.20.0 /24

R2(dhcp-config)#default-router 192.168.20.1

R2(dhcp-config)#exit

Trên Server:

Server(config)#interface f0/0

Server(config-if)#no shutdown

Server(config-if)#ip address 192.168.10.2 255.255.255.0

Server(config-if)#exit

Server(config)#ip route 0.0.0.0 0.0.0.0 192.168.10.1

Trên Client:

Client(config)#interface f0/0

Client(config-if)#no shutdown

Client(config-if)#ip address dhcp

Client(config-if)#exit

Sau khi cấu hình xong, chúng ta cùng thực hiện kiểm tra cấu hình vừa thực hiện.

Kiểm tra:

Định tuyến đã hội tụ trên R1 và R2:

R1#show ip route eigrp

D    192.168.20.0/24 [90/307200] via 192.168.12.2, 00:08:20, FastEthernet0/1

R2#show ip route eigrp

D    192.168.10.0/24 [90/307200] via 192.168.12.1, 00:08:41, FastEthernet0/1

Client đã nhận được cấu hình IP từ DHCP:

Client#show ip interface brief f0/0

Interface                  IP-Address      OK? Method Status                Protocol

FastEthernet0/0            192.168.20.2    YES DHCP   up                    up     

Client#show ip route static

S*   0.0.0.0/0 [254/0] via 192.168.20.1

Ta kiểm tra rằng ACL trên cổng F0/0 của R1 đã hoạt động:

Client#ping 192.168.10.2

Type escape sequence to abort.

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

.!!!!

Success rate is 60 percent (4/5), round-trip min/avg/max = 112/160/200 ms

R1#show access-lists

Standard IP access list 1

    10 permit 192.168.20.0, wildcard bits 0.0.0.255 (5 matches)

Ta thấy Client đã đi đến được Server, bộ đếm ACL cho source xuất phát từ 192.168.20.0/24 đã tăng lên.

Ta thử ping từ một địa chỉ khác ngoài dải 192.168.20.0/24:

R2#ping 192.168.10.2

Type escape sequence to abort.

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

U.U.U

Success rate is 0 percent (0/5)

Kết quả ping không thành công cho thấy ACL đã thực hiện chặn hiệu quả.

Như vậy, đến đây, chúng ta đã hoàn thành xong phần cấu hình ban đầu.

Bước 2: Cấu hình Dynamic NAT

Trong bước này, chúng ta thực hiện chuyển đổi địa chỉ cho VLAN 20 thành subnet mới. Tiếp đó, chúng ta thực hiện cấu hình Dynamic NAT để đảm bảo các user thuộc VLAN 20 vẫn truy nhập bình thường vào các server đặt tại VLAN 10 với địa chỉ mới.

  • Đổi lại IP trên cổng F0/0 của R2 thành 192.168.2.1/24.
  • Cấu hình hiệu chỉnh lại pool DHCP VLAN20 với subnet cấp phát được đổi lại thành 192.168.2.0/24, default – router được đổi thành 192.168.2.1.
  • Tạo một interface loopback trên R2 lấy địa chỉ là 192.168.20.1/24.
  • Cấu hình Dynamic NAT trên R2 NAT toàn bộ mạng 192.168.2.0/24 thành mạng 192.168.20.0/24.
  • Kiểm tra rằng Client thuộc VLAN 20 khi nhận được địa chỉ mới vẫn truy nhập được vào VLAN 10.

Cấu hình

Như kịch bản đã nêu ra, VLAN 20 được chuyển đổi IP thành subnet 192.168.2.0/24. Để thực hiện điều này, chúng ta hiệu chỉnh lại cổng giao tiếp của R2 với VLAN 20 và hiệu chỉnh lại pool IP sẽ cấp cho VLAN 20 từ R2:

R2(config)#interface f0/0

R2(config-if)#ip address 192.168.2.1 255.255.255.0

R2(config-if)#exit

R2(config)#ip dhcp pool VLAN20

R2(dhcp-config)#no network 192.168.20.0 /24

R2(dhcp-config)#no default-router 192.168.20.1

R2(dhcp-config)#network 192.168.2.0 /24

R2(dhcp-config)#default-router 192.168.2.1

R2(dhcp-config)#exit

Khi chúng ta thay đổi địa chỉ trên cổng F0/0 của R2, R1 sẽ không còn thấy được subnet 192.168.20.0/24 nữa:

R1#show ip route eigrp

 

R1#

Chúng ta cần phải đảm bảo R1 vẫn thấy được subnet 192.168.20.0/24 và vẫn đẩy dữ liệu đi đến subnet này về phía R2. Để làm được điều này, chúng ta tạo một interface loopback trên R2 với một địa chỉ bất kỳ thuộc dải 192.168.20.0/24:

R2(config)#interface lo 0

R2(config-if)#ip address 192.168.20.1 255.255.255.0

R2(config-if)#exit

Tiến trình EIGRP của R2 đã thực hiện “network 192.168.20.0” nên ta sẽ thấy subnet này xuất hiện trở lại trong bảng định tuyến của R1:

R1#show ip route eigrp

D    192.168.20.0/24 [90/409600] via 192.168.12.2, 00:02:08, FastEthernet0/1

Như đã trao đổi, để các user thuộc VLAN 20 có thể truy nhập đến được các server thuộc VLAN 10, dải IP các user của VLAN 20 sử dụng phải là 192.168.20.0/24 vì trên R1 đã cấu hình một ACL outbound trên cổng F0/0 chỉ cho qua dải địa chỉ này. Vì chúng ta không được phép thay đổi cấu hình trên R1 nên chúng ta phải thực hiện cấu hình NAT trên router R2 để chuyển đổi các địa chỉ IP của dải 192.168.2.0/24 thành các IP của dải 192.168.20.0/24 khi các user thuộc VLAN 20 truy nhập đến server thuộc VLAN 10.

Ta thấy rằng thao tác NAT trong trường hợp này vẫn là thao tác NAT một – một: cứ một IP của mạng 192.168.2.0/24 sẽ được đổi thành một IP của mạng 192.168.20.0/24. Tuy nhiên vì các IP của VLAN 20 được cấp phát động bằng DHCP nên ta sẽ không sử dụng phương thức Static NAT mà sử dụng phương thức Dynamic NAT để thực hiện NAT.

R2(config)#access-list 1 permit 192.168.2.0 0.0.0.255

R2(config)#ip nat pool VLAN20 192.168.20.2 192.168.20.254 prefix-length 24

R2(config)#ip nat inside source list 1 pool VLAN20

R2(config)#interface f0/0

R2(config-if)#ip nat inside

R2(config-if)#exit

R2(config)#interface f0/1

R2(config-if)#ip nat outside

R2(config-if)#exit

Đến đây, chúng ta đã thực hiện cấu hình xong NAT để đảm bảo rằng các user thuộc VLAN 20 khi sử dụng địa chỉ mới vẫn có thể truy nhập vào được các server của VLAN 10.

Kiểm tra:

Đầu tiên, chúng ta thực hiện kiểm tra bảng NAT trên R2:

R2#show ip nat translations

 

R2#

Ta thấy rằng hiện giờ bảng NAT đang trống: với Dynamic NAT, các entry NAT sẽ chỉ được tạo ra khi có gói tin đi qua router và được NAT.

Chúng ta bật “debug ip nat” trên router R2 để quan sát hành động NAT:

R2#debug ip nat

IP NAT debugging is on

Ta cũng bật “debug ip icmp” trên Server để quan sát xem địa chỉ nào được sử dụng cho source của các gói tin đi đến server:

Server#debug ip icmp

ICMP packet debugging is on

Ta thực hiện xin cấp phát lại IP mới từ client:

Client(config)#int f0/0

Client(config-if)#ip address dhcp

Client(config-if)#end

Client#

*Mar  1 00:08:10.823: %DHCP-6-ADDRESS_ASSIGN: Interface FastEthernet0/0 assigned DHCP address 192.168.2.2, mask 255.255.255.0, hostname Client

Thông báo Syslog hiện ra cho biết router Client đã nhận được địa chỉ 192.168.2.2 từ DHCP Server.

Sau khi đã có địa chỉ mới, chúng ta kiểm tra rằng Client với địa chỉ mới này vẫn đi được đến Server:

Client#ping 192.168.10.2

Type escape sequence to abort.

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

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 48/88/132 ms

Kết quả ping thành công xác nhận rằng Client đã đi đến được Server.

Ta quan sát các kết quả debug:

Trên R2:

*Mar  1 00:32:15.559: NAT*: s=192.168.2.2->192.168.20.2, d=192.168.10.2 [15]

*Mar  1 00:32:15.659: NAT*: s=192.168.10.2, d=192.168.20.2->192.168.2.2 [15]

Ta thấy R2 đã thực hiện NAT địa chỉ đúng theo yêu cầu đặt ra.

Trên Server:

*Mar  1 00:31:25.067: ICMP: echo reply sent, src 192.168.10.2, dst 192.168.20.2

Server cũng thấy rằng các gói tin đến từ địa chỉ 192.168.20.2 chứ không phải là 192.168.2.2.

Chúng ta thử quan sát bảng NAT của router R2:

R2#show ip nat translations

Pro Inside global      Inside local       Outside local      Outside global

icmp 192.168.20.2:4    192.168.2.2:4      192.168.10.2:4     192.168.10.2:4

--- 192.168.20.2       192.168.2.2        ---                ---

Lúc này, sau khi có lưu lượng đi qua router được thực hiện NAT, các entry chuyển đổi tương ứng đã xuất hiện trong bảng NAT.

Ta thấy bảng NAT gồm có hai entry:

  • Một entry cụ thể cho hành động NAT vừa thực hiện. Entry này chỉ rõ các địa chỉ tham gia vào NAT, các port cũng như giao thức nền được sử dụng cho hoạt động NAT đã tiến hành:

Pro Inside global      Inside local       Outside local    Outside global

icmp 192.168.20.2:4    192.168.2.2:4      192.168.10.2:4   192.168.10.2:4

  • Một entry chung được tạo thêm, chỉ hiển thị cặp địa chỉ Inside local và Inside global:

Pro Inside global      Inside local       Outside local    Outside global

--- 192.168.20.2       192.168.2.2        ---              ---

Entry chung này được gọi là entry “non – extendable”, bao trùm mọi entry NAT cụ thể khác của host 192.168.2.2. Entry này cho phép các host ở bên ngoài có thể đi đến được host 192.168.2.2 ở bên trong; lưu lượng đi đến 192.168.2.2 lúc này không cần phải là lưu lượng trả về cho lưu lượng đi từ trong ra ngoài trước đó của host 192.168.2.2.

Như vậy, việc chuyển đổi đã diễn ra thành công, các user đã có thể sử dụng địa chỉ mới để đi đến được server mà ta không phải thay đổi bất kỳ cấu hình gì trên R1.

Chúng ta đã cùng nhau khảo sát một kịch bản lab sử dụng Dynamic NAT. Trong các bài viết tới, chúng ta sẽ cùng nhau tiếp tục khảo sát các kỹ thuật khác của NAT.

TRUNG TÂM WAREN