Chương 2. Ứng dụng TCP/IP & Intranet
3.4 Các bài thực hành
3.4.2 Bài số 2: Thiết lập NAT cho Gateway
Trong bài thực hành này, yêu cầu đặt ra vẫn như bài số 1, tuy nhiên khi đi ra khỏi mạng Intranet của công ty, gói tin cần được chuyển đổi địa chỉ IP từ dạng IP private (192.168.56.x) sang dạng IP public (203.162.1.1) để có thể lưu thông trên mạng Internet. Để thực hiện điềug này, chức năng NAT trong Gateway cần được thiết lập.
Thiết lập chức năng log gói tin
Để kiểm tra đường đi các gói tin, sử dụng iptables để log chúng vào file /var/etc/messages. Phương pháp này sử dụng dịch vụ syslog của hệ thống và dùng iptables để khai báo các rule với target LOG. Do sử dụng lệnh ping và tracepath để kiểm tra các kết nối giữa các máy nên chỉ cần log các gói tin ICMP. Tiếp tục bài thực hành số 1, trên máy outside
[root@hp.mydomain.vn]# ping 203.162.1.200
PING 203.162.1.200 (203.162.1.200) 56(84) bytes of data.
64 bytes from 203.162.1.200: icmp_seq=1 ttl=63 time=1.66 ms 64 bytes from 203.162.1.200: icmp_seq=1 ttl=63 time=1.72 ms [root@hp.mydomain.vn]# tracepath -n 203.162.1.200
1?: [LOCALHOST] pmtu 1500 1: 192.168.56.3 2.513ms 1: 203.162.1.200 5.999ms
Resume: pmtu 1500
và hp.mydomain.vn thực hiện log tất cả các gói tin icmp ở chain OUTPUT. Sau đó xem file log /var/log/messages:
[root@outside ~]# route -n Kernel IP routing table
> iptables -A OUTPUT -p icmp -j LOG
># tail -f /var/log/messages
Sử dụng lệnh ping để kiểm tra kết nối giữa hai máy outside và hp.mydomain.vn rồi xem log file, kết quả như sau:
Có thể thấy các gói tin ICMP với type=0 được gửi đi và type=8 được trả về theo các địa chỉ IP của ouside là 203.162.1.200 và hp.mydomain.vn là 192.168.56.5.
Thiết lập chức năng NAT trong Gateway
Bước tiếp theo, ta không muốn các gói tin khi lưu thông ngoài mạng Intranet lại sử dụng địa chỉ IP private mà thay vào đó, các gói tin này phải được NAT sang địa chỉ mặt ngoài của Gateway (là 203.162.1.100). Để đảm bảo máy outside không thể nói chuyện trực tiếp với mạng Intranet 192.168.56.0, ta bỏ đi dòng route mặc định vào Gateway:
Destination
203.162.1.0 Gateway
0.0.0.0 Genmask
255.255.255.0 Flags Metric Ref Use Iface
U 0 0 0 eth1
10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1
0.0.0.0 203.162.1. 100 0.0.0.0 UG 0 0 0 eth1 cần bỏ dòng này đi
[root@outside ~]# route del -net 0.0.0.0 [root@outside ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
203.162.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1 [root@outside ~]# tail -f /var/log/messages
Nov 17 05:24:04 outside kernel: IN= OUT=eth1 SRC=203.162.1.200 DST=192.168.56.5 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=34404 PROTO=ICMP TYPE=0 CODE=0 ID=55045 SEQ=3
Nov 17 05:24:04 outside kernel: IN= OUT=eth1 SRC=203.162.1.200 DST=192.168.56.5 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=34405 PROTO=ICMP TYPE=0 CODE=0 ID=55045 SEQ=3
[root@hp ~]# tail -f /var/log/messages
Nov 17 04:50:23 hp kernel: IN= OUT=eth1 SRC=192.168.56.5 DST=203.162.1.200 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=10132 PROTO=ICMP TYPE=0 CODE=0 ID=17925 SEQ=1
Nov 17 04:50:24 hp kernel: IN= OUT=eth1 SRC=192.168.56.5 DST=203.162.1.200 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=10133 PROTO=ICMP TYPE=0 CODE=0 ID=17925 SEQ=2
Để kiểm tra máy outside không thể nói chuyện trực tiếp với mạng Intranet, sử dụng lệnh ping đến máy hp.mydomain.vn:
[root@mydomain ~]# iptables -L -n Chain INPUT (policy ACCEPT)
Chain FORWARD (policy ACCEPT) targetprot opt sourcedestination
REJECTall -- 0.0.0.0/00.0.0.0/0reject-with icmp-host-prohibited cần bỏ đi
Chain OUTPUT (policy ACCEPT) targetprot opt sourcedestination
[root@mydomain ~]# iptables -D INPUT -j REJECT --reject-with icmp-host-prohibited [root@mydomain ~]# iptables -D FORWARD -j REJECT --reject-with icmp-host-prohibited [root@mydomain ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
Chain FORWARD (policy ACCEPT) targetprot opt sourcedestination Chain OUTPUT (policy ACCEPT) targetprot opt sourcedestination
[root@outside ~]# ping -n 192.168.56.5 connect: Network is unreachable
Như vậy là máy outside bên ngoài mạng Intranet đã không thể kết nối đến một máy bên trong mạng Intranet với địa chỉ private của mạng Intranet này. Bước tiếp theo là thiết lập chức năng NAT trong Gateway để máy bên trong mang Intranet có thể kết nối với máy bên ngoài. Bật lại service iptables trên máy Gateway (do đã bị tắt đi trong bài trước). Đương nhiên, khi bật service này lên, máy hp.mydomain.vn không thể ping được đến máy outside. Lý do là iptables trên máy Gateway mặc định sử dụng một số luật để chặn kết nối này. Do vậy, ta cần hủy bỏ các luật chặn các gói tin này trên Gateway:
target prot opt source
ACCEPT all -- 0.0.0.0/0 destination
0.0.0.0/0 state RELATED,ESTABLISHED ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited cần bỏ đi
target prot opt source
ACCEPT all -- 0.0.0.0/0 destination
0.0.0.0/0 state RELATED,ESTABLISHED ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
Bổ sung luật MASQUERADE vào table nat. Như đã mô tả bên trên, “masquerading”
(cải trang) là một tên gọi khác của chức năng NAT từ nhiều địa chỉ IP private vào 1 địa chỉ IP public. Khi thực hiện NAT, iptables luôn sử dụng địa chỉ IP mặt ngoài của Gateway để “cải trang” các địa chỉ IP private trong mạng Intranet:
Trang 120
[root@mydomain ~]# iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE [root@mydomain ~]# iptables -t nat -L -v
Chain PREROUTING (policy ACCEPT 46 packets, 5273 bytes) pktsbytestargetprotoptinoutsourcedestination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pktsbytestargetprotoptinoutsource destination
pkts bytes target prot opt in out source destination
1 84 MASQUERADE all -- any eth2 anywhere anywhere
Sử dụng ping để kiểm tra kết nối giữa máy trong mạng Intranet hp.mydomain.vn và máy ngoài mạng Intranet outside, xem kết quả log file:
Kết nối đã chạy thông. Phân tích thêm các thông tin log có thể thấy máy hp.mydomain.vn gửi đi các gói tin ICMP type=8 từ địa chỉ 192.168.56.5 nhưng khi máy outside nhận được và trả về gói tin ICMP type=0 thì địa chỉ nguồn đã thay đổi thành 192.168.1.100. Đây chính là nhờ chức năng NAT trên Gateway đã được kích hoạt.