Tại sao cần nat inside và nat outside
Trong bài viết trước, chúng ta đã cùng nhau tìm hiểu những nét tổng quan nhất về kỹ thuật NAT (Network Address Translation). Như thường lệ, để nắm được vấn đề một cách chắc chắn, chúng ta cùng khảo sát những vấn đề đã trình bày trong phần lý thuyết thông qua các bài lab ví dụ. Trong bài viết này, chúng ta sẽ cùng nhau khảo sát một bài lab ví dụ về kỹ thuật Static NAT.
Show Sơ đồ:Trên hình 1 là mô hình lab mô phỏng một mạng doanh nghiệp có một đường truyền đi Internet. Trong đó:
Trên mô hình lab này, chúng ta sẽ cùng nhau khảo sát việc sử dụng Static NAT để NAT một số địa chỉ bên trong thành các địa chỉ bên ngoài nhằm phục vụ cho các địa chỉ này có thể đi ra được môi trường Public. Thực hiệnBước 1: Xây dựng mô hình ban đầu:
Cấu hìnhĐầu tiên, ta đặt IP cho các link đấu nối giữa các thiết bị: R1(config)#int 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)#int f0/1 R1(config-if)#no shutdown R1(config-if)#ip address 192.168.12.1 255.255.255.252 R1(config-if)#exit R2(config)#int f0/0 R2(config-if)#ip add 192.168.12.2 255.255.255.252 R2(config-if)#exit R2(config)#int f0/1 R2(config-if)#ip address 200.0.0.1 255.255.255.252 R2(config-if)#exit ISP(config)#interface f0/1 ISP(config-if)#no shutdown ISP(config-if)#ip address 200.0.0.2 255.255.255.252 ISP(config-if)#exit ISP(config)#interface f0/0 ISP(config-if)#no shutdown ISP(config-if)#ip address 100.0.0.1 255.255.255.0 ISP(config-if)#exit Tiếp theo, ta thực hiện chạy định tuyến EIGRP 100 trên các router R1 và R2 để đảm bảo các địa chỉ trên các mạng nội bộ thấy nhau: 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 R2(config)#ip route 0.0.0.0 0.0.0.0 200.0.0.2 R2(config)#router eigrp 100 R2(config-router)#no auto-summary R2(config-router)#network 192.168.12.0 R2(config-router)#redistribute static R2(config-router)#exit Cấu hình các router giả lập các host trên mạng: Server1(config)#interface f0/0 Server1(config-if)#no shutdown Server1(config-if)#ip address 192.168.10.2 255.255.255.0 Server1(config-if)#exit Server1(config)#ip route 0.0.0.0 0.0.0.0 192.168.10.1 Server2(config)#interface f0/0 Server2(config-if)#no shutdown Server2(config-if)#ip address 100.0.0.2 255.255.255.0 Server2(config-if)#exit Server2(config)#ip route 0.0.0.0 0.0.0.0 100.0.0.1 Cấu hình ISP rót subnet 199.99.9.0/29 xuống cho doanh nghiệp: ISP(config)#ip route 199.99.9.0 255.255.255.248 200.0.0.1 Khi một ISP rót một range IP nào đó cho doanh nghiệp, ISP sẽ đảm bảo về mặt định tuyến rằng mọi gói tin trên Internet đi đến range này sẽ được chuyển tới tay router biên của mạng doanh nghiệp. Trong trường hợp của bài lab này, chúng ta chỉ cần cấu hình một route tĩnh cho subnet 199.99.9.0/29 như ở trên để giả lập tình huống “rót IP public cho doanh nghiệp”. Với route tĩnh đã cấu hình, nếu Server2 – đại diện cho các host trên “Internet” – gửi dữ liệu đến subnet 199.99.9.0/29, dữ liệu sẽ được router ISP forward đến R2. Như vậy, mạng doanh nghiệp giả lập này đã được cấp phát IP public. Kiểm traChúng ta cùng kiểm tra cấu hình ban đầu đã thực hiện. Định tuyến nội bộ đã hội tụ: R1#sh ip route eigrp D*EX 0.0.0.0/0 [170/307200] via 192.168.12.2, 00:01:09, FastEthernet0/1 R2#show ip route eigrp D 192.168.10.0/24 [90/307200] via 192.168.12.1, 00:14:58, FastEthernet0/0 R2 đã đi đến được VLAN 10: 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: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 64/97/128 ms Bên ngoài vùng Public, các địa chỉ public đi đến được nhau: R2#ping 100.0.0.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 100.0.0.2, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 64/97/124 ms Server2#ping 200.0.0.1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 200.0.0.1, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 96/104/108 ms Bước 2: Cấu hình Static NATThực hiện cấu hình Static NAT trên R2 đảm bảo yêu cầu sau:
Cấu hìnhTa thực hiện cấu hình NAT trên router R2 để đáp ứng yêu cầu đặt ra: R2(config)#ip nat inside source static 192.168.10.2 199.99.9.2 R2(config)#ip nat outside source static 100.0.0.2 192.168.12.252 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 Ta cùng phân tích cấu hình đã thực hiện:
R2(config)#ip nat inside source static 192.168.10.2 199.99.9.2
R2(config)#ip nat outside source static 100.0.0.2 192.168.12.252
R2(config)#interface f0/0 R2(config-if)#ip nat inside R2(config)#interface f0/1 R2(config-if)#ip nat outside
Kiểm traSau khi cấu hình xong, chúng ta thực hiện một số thao tác kiểm tra. Trước hết, chúng ta quan sát bảng NAT của router R2: R2#show ip nat translations Pro Inside global Inside local Outside local Outside global --- --- --- 192.168.12.252 100.0.0.2 --- 199.99.9.2 192.168.10.2 --- --- Từ kết quả hiển thị, ta thấy các entry NAT đã được cài đặt tĩnh lên bảng NAT:
Để quan sát hoạt động của NAT, chúng ta bật debug trên router R2: R2#debug ip nat detailed IP NAT detailed debugging is on Ta thực hiện ping từ Server1 ra bên ngoài: Server1#ping 200.0.0.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 200.0.0.2, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 92/104/120 ms Ping thành công chứng tỏ NAT đã hoạt động, host bên trong đã đi được Internet. Chúng ta quan sát kết quả debug trên R2: *Mar 1 00:41:31.979: NAT*: i: icmp (192.168.10.2, 3) -> (200.0.0.2, 3) [15] *Mar 1 00:41:31.979: NAT*: s=192.168.10.2->199.99.9.2, d=200.0.0.2 [15] *Mar 1 00:41:32.051: NAT*: o: icmp (200.0.0.2, 3) -> (199.99.9.2, 3) [15] *Mar 1 00:41:32.051: NAT*: s=200.0.0.2, d=199.99.9.2->192.168.10.2 [15] Kí hiệu “i” dùng để đánh dấu cho chiều đi từ trong ra ngoài. Khi đi từ trong ra ngoài, source IP 192.168.10.2 đã được chuyển đổi thành 199.99.9.2 trong khi destination IP được giữ nguyên (“s=192.168.10.2->199.99.9.2, d=200.0.0.2”). Kí hiệu “o” dùng để đánh dấu cho chiều đi từ ngoài vào trong. Khi đi từ ngoài vào trong, destination IP 199.99.9.2 đã được chuyển đổi ngược lại thành 192.168.10.2 và source IP được giữ nguyên (“s=200.0.0.2, d=199.99.9.2->192.168.10.2”). Ta có thể từ một host bên ngoài ping đến được server bên trong thông qua IP đại diện 199.99.9.2: ISP#ping 199.99.9.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 199.99.9.2, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 88/102/124 ms Kết quả debug tương ứng trên R2: *Mar 1 00:48:26.927: NAT*: o: icmp (200.0.0.2, 0) -> (199.99.9.2, 0) [0] *Mar 1 00:48:26.927: NAT*: s=200.0.0.2, d=199.99.9.2->192.168.10.2 [0] *Mar 1 00:48:26.999: NAT*: i: icmp (192.168.10.2, 0) -> (200.0.0.2, 0) [0] *Mar 1 00:48:26.999: NAT*: s=192.168.10.2->199.99.9.2, d=200.0.0.2 [0] Ta thấy hoạt động NAT đã diễn ra đúng đắn cho cặp địa chỉ 192.168.10.2 – 199.99.9.2. Tiếp theo, chúng ta thực hiện kiểm tra việc đại diện cho server bên ngoài của địa chỉ 192.168.12.252 ở bên trong. Đầu tiên, ta thực hiện bật “debug ip icmp” trên router Server2 để kiểm tra xem các gói tin ping có đi đến được server này không: Server2#debug ip icmp ICMP packet debugging is on Ta thực hiện ping kiểm tra từ Server1 bên trong: Server1#ping 192.168.12.252 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 192.168.12.252, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 100/133/168 ms Ta thấy kết quả ping thành công. Quan sát kết quả debug trên Server2, ta thấy các gói tin ping đã thực sự đi đến được server này: Server2# *Mar 1 00:06:38.903: ICMP: echo reply sent, src 100.0.0.2, dst 199.99.9.2 *Mar 1 00:06:39.043: ICMP: echo reply sent, src 100.0.0.2, dst 199.99.9.2 *Mar 1 00:06:39.143: ICMP: echo reply sent, src 100.0.0.2, dst 199.99.9.2 *Mar 1 00:06:39.311: ICMP: echo reply sent, src 100.0.0.2, dst 199.99.9.2 *Mar 1 00:06:39.463: ICMP: echo reply sent, src 100.0.0.2, dst 199.99.9.2 Kết quả debug NAT trên router biên R2 cũng cho thấy hoạt động NAT đã diễn ra đúng đắn: *Mar 1 00:16:57.823: NAT*: i: icmp (192.168.10.2, 2) -> (192.168.12.252, 2) [10] *Mar 1 00:16:57.823: NAT*: s=192.168.10.2->199.99.9.2, d=192.168.12.252 [10] *Mar 1 00:16:57.827: NAT*: s=199.99.9.2, d=192.168.12.252->100.0.0.2 [10] *Mar 1 00:16:57.883: NAT*: o: icmp (100.0.0.2, 2) -> (199.99.9.2, 2) [10] *Mar 1 00:16:57.883: NAT*: s=100.0.0.2->192.168.12.252, d=199.99.9.2 [10] *Mar 1 00:16:57.887: NAT*: s=192.168.12.252, d=199.99.9.2->192.168.10.2 [10] Ta thấy, trên chiều từ trong ra ngoài, địa chỉ source 192.168.10.2 đã được chuyển đổi thành 199.99.9.2 (s=192.168.10.2->199.99.9.2, d=192.168.12.252) và tiếp đó, địa chỉ destination 192.168.12.252 đã được chuyển đổi thành 100.0.0.2 (s=199.99.9.2, d=192.168.12.252->100.0.0.2). Trên chiều từ ngoài vào trong, các hành động diễn ra ngược lại: địa chỉ source 100.0.0.2 được chuyển đổi lại thành 192.168.12.252 (s=100.0.0.2->192.168.12.252, d=199.99.9.2) và kế đó, địa chỉ destination 199.99.9.2 được chuyển đổi thành 192.168.10.2 (s=192.168.12.252, d=199.99.9.2->192.168.10.2). Các hành động này đảm bảo Server1 đi đến được Server2 bằng địa chỉ đại diện 192.168.12.252 trên mạng nội bộ. Ta thử kiểm tra với các host khác trên mạng nội bộ: R1#ping 100.0.0.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 100.0.0.2, timeout is 2 seconds: ..... Success rate is 0 percent (0/5) R1#ping 192.168.12.252 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 192.168.12.252, timeout is 2 seconds: ..... Success rate is 0 percent (0/5) Ta thấy rằng ngoại trừ host Server1 ra, các host khác trong mạng nội bộ chưa đi được Internet cũng như chưa đi đến được Server2 bằng địa chỉ đại diện outside local của nó. Đó là bởi vì chúng ta chưa thực hiện NAT cho các host còn lại thành các IP public để chúng có thể đi ra ngoài Internet. Kết quả debug ICMP trên Server2: *Mar 1 00:24:51.415: ICMP: echo reply sent, src 100.0.0.2, dst 192.168.12.1 *Mar 1 00:24:51.475: ICMP: dst (100.0.0.2) host unreachable rcv from 100.0.0.1 Ta thấy, Server2 nhận được gói tin ICMP ping đến từ địa chỉ nội bộ 192.168.12.1 nhưng không thể gửi gói trả lời về được vì các subnet nội bộ không được định tuyến trên môi trường Internet (trong bài lab này, subnet 192.168.12.0/30 không hiện diện trong bảng định tuyến của router ISP): host unreachable rcv from 100.0.0.1. Trong một bài lab khác về NAT overload, chúng ta sẽ cùng khảo sát việc cấu hình để mọi host trong mạng nội bộ có thể đi Internet được thông qua một số lượng ít hơn các địa chỉ IP Public. Với bài lab này, ta dừng lại ở việc đáp ứng yêu cầu giao tiếp Internet cho một mình Server1. Bước 3: Static PAT
Cấu hìnhGỡ bỏ cấu hình NAT inside đã thực hiện ở bước 2 trên R2: R2(config)#no ip nat inside source static 192.168.10.2 199.99.9.2 Kỹ thuật Static NAT không chỉ cho phép NAT tĩnh một địa chỉ trong nội bộ thành một địa chỉ public mà còn cho phép chỉ định tường minh các port TCP hoặc UDP sẽ được NAT. Điều này cho phép chúng ta chỉ NAT ra ngoài các port cần thiết cho các ứng dụng chạy trên các server mà không cần phải NAT các port còn lại ra môi trường public. Để thực hiện yêu cầu về truy nhập web cho Server1, chúng ta thực hiện NAT địa chỉ 192.168.10.2 của Server1 thành địa chỉ 199.99.9.2, tuy nhiên hành động NAT sẽ chỉ áp dụng cho TCP port 80 local và chuyển đổi thành port 8080 public: R2(config)#ip nat inside source static tcp 192.168.10.2 80 199.99.9.2 8080 Để phục vụ cho nhu cầu telnet, thực hiện NAT địa chỉ 192.168.12.1 của router R1 thành địa chỉ 199.99.9.3 và chỉ chuyển đổi cho TCP port 23 thành TCP port 8023 trên môi trường public: R2(config)#ip nat inside source static tcp 192.168.12.1 23 199.99.9.3 8023 Kiểm traChúng ta quan sát bảng NAT của router R2: R2#show ip nat translations Pro Inside global Inside local Outside local Outside global --- --- --- 192.168.12.252 100.0.0.2 tcp 199.99.9.2:8080 192.168.10.2:80 --- --- tcp 199.99.9.3:8023 192.168.12.1:23 --- --- Ta thấy, các entry NAT đã được điền tĩnh vào trong bảng NAT. Ta cấu hình telnet cho R1 và bật HTTP server trên Server1: R1(config)#line vty 0 4 R1(config-line)#password CISCO R1(config-line)#login R1(config-line)#exit Server1(config)#ip http server Ta thực hiện các truy nhập từ bên ngoài để kiểm tra. Telnet đến R1 từ router ISP: ISP#telnet 199.99.9.3 8023 Trying 199.99.9.3, 8023 ... Open User Access Verification Password: R1> Ta thấy, từ bên ngoài đã telnet vào được R1 với port 8023. Ta quan sát các thông điệp debug trên R2 để kiểm tra hành động NAT: *Mar 1 01:36:44.123: NAT*: o: tcp (200.0.0.2, 30259) -> (199.99.9.3, 8023) [40637] *Mar 1 01:36:44.123: NAT*: TCP s=30259, d=8023->23 *Mar 1 01:36:44.127: NAT*: s=200.0.0.2, d=199.99.9.3->192.168.12.1 [40637] *Mar 1 01:36:44.167: NAT*: i: tcp (192.168.12.1, 23) -> (200.0.0.2, 30259) [46094] *Mar 1 01:36:44.167: NAT*: TCP s=23->8023, d=30259 *Mar 1 01:36:44.171: NAT*: s=192.168.12.1->199.99.9.3, d=200.0.0.2 [46094] Kết quả debug chỉ ra rằng hành động NAT cho cặp port 23 – 8023 đã diễn ra đúng đắn. Tiếp theo, ta thử truy nhập web đến Server1 từ bên ngoài bằng port 8080: ISP#telnet 199.99.9.2 8080 Trying 199.99.9.2, 8080 ... Open exit HTTP/1.1 400 Bad Request Date: Fri, 01 Mar 2002 01:45:15 GMT Server: cisco-IOS Accept-Ranges: none 400 Bad Request [Connection to 199.99.9.2 closed by foreign host] ISP# Ta thấy, việc truy nhập đến port 8080 đã diễn ra thành công theo như yêu cầu đặt ra. Ta cũng thực hiện quan sát kết quả debug của hành động NAT port 80 – 8080: *Mar 1 01:45:37.003: NAT*: o: tcp (200.0.0.2, 27709) -> (199.99.9.2, 8080) [52775] *Mar 1 01:45:37.007: NAT*: TCP s=27709, d=8080->80 *Mar 1 01:45:37.007: NAT*: s=200.0.0.2, d=199.99.9.2->192.168.10.2 [52775] *Mar 1 01:45:37.107: NAT*: i: tcp (192.168.10.2, 80) -> (200.0.0.2, 27709) [22688] *Mar 1 01:45:37.107: NAT*: TCP s=80->8080, d=27709 *Mar 1 01:45:37.111: NAT*: s=192.168.10.2->199.99.9.2, d=200.0.0.2 [22688] Kết quả debug cũng đã chỉ ra hoạt động NAT đã diễn ra đúng đắn cho cặp port 80 – 8080. Như vậy, thông qua cấu hình NAT tĩnh cho một số port được chỉ định, chúng ta đã thực hiện triển khai một số dịch vụ tương ứng từ các địa chỉ nội bộ lên môi trường public. Chúng ta đã cùng nhau khảo sát kỹ thuật Static NAT thông qua phân tích một ví dụ cấu hình. 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 để tìm hiểu chi tiết hơn về NAT. TRUNG TÂM WAREN |