Bài số 3: Qui hoạch Gateway cho mạng Intranet

Bài này yêu cầu qui hoạch Gateway cho 3 mạng LAN như hình vẽ bên trên. Ngoài ra, đối với LAN1, sử dụng DHCP để cấp địa chỉ IP động cho các trạm trong mạng. Các bước tiến hành như sau:

  • Bước 1: Cấu hình router R1
  • Bước 2: Cấu hình máy trạm cho LAN1
  • Bước 3: Cấu hình router R2 và R3
  • Bước 4: Cấu hình máy trạm cho LAN3
  • Bước 5: Kiểm tra hệ thống
  • Bước 6: Xử lý tình huống Redirect Host

Bước 1: Cấu hình router R1

Cấu hình địa chỉ IP cho các kết nối mạng của R1:

> ifconfig eth1 192.168.1.1/25
> ifconfig eth2 192.168.1.129/25
> ifconfig -a
eth1      Link encap:Ethernet  HWaddr 08:00:27:96:4A:E6
          inet addr:192.168.1.1  Bcast:192.168.1.127  Mask:255.255.255.128
          inet6 addr: fe80::a00:27ff:fe96:4ae6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:181 errors:0 dropped:0 overruns:0 frame:0
          TX packets:30 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:20910 (20.4 KiB)  TX bytes:1928 (1.8 KiB)

eth2      Link encap:Ethernet  HWaddr 08:00:27:D7:D8:3E
          inet addr:192.168.1.129  Bcast:192.168.1.255  Mask:255.255.255.128
          inet6 addr: fe80::a00:27ff:fed7:d83e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:199 errors:0 dropped:0 overruns:0 frame:0
          TX packets:30 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:24412 (23.8 KiB)  TX bytes:1928 (1.8 KiB)
			 

Chú ý kiểm tra và bật chức năng “forward” của router R1 bằng tham số hệ thống net.ipv4.ip_forward:

> sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0
> sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1

Cấu hình DHCP server cho router R1 để cung cấp địa chỉ IP cho các trạm trong mạng LAN1, ngoài ra thiết lập cấu hình Default Gateway cũng là R1 luôn (địa chỉ 192.168.1.1/25) và khởi động lại dịch vụ DHCP trên R1:

> nano /etc/dhcp/dhcpd.conf

subnet 192.168.1.0 netmask 255.255.255.128 {
  range 192.168.1.20 192.168.1.30;

  default-lease-time 86400;
  max-lease-time 86400;

  option routers 192.168.1.1;
  option domain-name-servers 4.4.4.4,8.8.8.8;
}

> service dhcpd restart
Starting dhcpd:                                            [  OK  ]
			 

Cấu hình bảng routing cho router R1. Do tất cả các định tuyến gián tiếp từ R1 đến các mạng khác (gồm LAN3 và Internet) đều đi qua R2 tại địa chỉ 192.168.1.130 nên cấu hình routing của R1 như sau:

> route add -net 0.0.0.0/0 gw 192.168.1.130
> route -n
Kernel IP routing table
Destination             Gateway                 Genmask                 Flags   Metric Ref    Use      Iface
0.0.0.0                 192.168.1.130           0.0.0.0                 UGH     0      0        0              eth2
192.168.1.0             0.0.0.0                 255.255.255.128 U       0      0        0              eth1
192.168.1.128           0.0.0.0                 255.255.255.128 U       0      0        0              eth2

Bước 2: Cấu hình máy trạm cho LAN1

Các máy trạm của LAN1 có thể được cấu hình theo 2 cách tĩnh hoặc động. Với cấu hình tĩnh, sử dụng lệnh ifconfig hoặc cấu hình mặc định trong file cấu hình của card mạng /etc/sysconfig/network-scripts/ifcfg-eth1. Lưu ý rằng dải địa chỉ IP từ 192.168.1.20 đến 192.168.1.30 đã được đặt trước để DHCP server sử dụng và cung cấp cho các client. Vì vậy, khi cấu hình tĩnh cần tránh các địa chỉ này:

> ifconfig eth1 192.168.1.15/25
>  nano /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE="eth1"
IPADDR=192.168.1.15
NETMASK=255.255.255.128

> nano /etc/sysconfig/network
NETWORKING=yes
GATEWAY=192.168.1.1

Với phương pháp cấu hình động, thiết lập file cấu hình /etc/sysconfig/network-scripts/ifcfg-eth1 để card mạng tự động nhận địa chỉ IP khi khởi động hoặc sử dụng lệnh dhclient để yêu cầu cấp địa chỉ IP (xem bài thực hành số 2):

> nano /etc/sysconfig/network-scripts/ifcfg-eth6
DEVICE=eth1
BOOTPROTO=dhcp
ONBOOT=yes

Cuối cùng, kiểm tra cấu hình mạng trên các máy trạm bằng lệnh route -n. Địa chỉ mạng 0.0.0.0 đại diện cho các mạng bên ngoài và tương ứng với nó, default gateway được sử cấu hình là 192.168.1.1:

> route -n
Kernel IP routing table
Destination             Gateway                 Genmask                 Flags   Metric Ref    Use      Iface
192.168.1.0             0.0.0.0                 255.255.255.128         U       0      0        0              eth1
0.0.0.0                 192.168.1.1             0.0.0.0                 UG      0      0        0              eth1

Bước 3: Cấu hình router R2 và R3

Cấu hình cho router R2 như sau:

> ifconfig eth1 192.168.1.130/25
> ifconfig eth2 192.168.2.1/24
ifconfig -a
eth1      Link encap:Ethernet  HWaddr 08:00:27:56:81:0C
          inet addr:192.168.1.130  Bcast:192.168.1.255  Mask:255.255.255.128
          inet6 addr: fe80::a00:27ff:fe56:810c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1275 errors:0 dropped:0 overruns:0 frame:0
          TX packets:607 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:126622 (123.6 KiB)  TX bytes:91395 (89.2 KiB)

eth2     Link encap:Ethernet  HWaddr 08:00:27:C4:D5:BA
          inet addr:192.168.2.1  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fec4:d5ba/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:221 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:25373 (24.7 KiB)  TX bytes:468 (468.0 b)

> route add -net 192.168.1.0/25 gw 192.168.1.129
> route add -net 0.0.0.0/0 gw 192.168.2.2
> route -n
Kernel IP routing table
Destination     	Gateway         	Genmask         	Flags 	Metric 	Ref    Use 	Iface
192.168.1.0     	192.168.1.129   	255.255.255.128 	UG    	0      	0        0 		eth1
192.168.1.128   	0.0.0.0         	255.255.255.128 	U    	0      	0        0 		eth1
192.168.2.0     	0.0.0.0         	255.255.255.0   	U     	0      	0        0 		eth2
0.0.0.0         	192.168.2.2     	0.0.0.0         	UG    	0      	0        0 		eth2
			 

Router R3 có một kết nối mạng ra Internet và một kết nối mạng nội bộ LAN3. Cấu hình máy ảo VirtualBox sử dụng card mạng NAT để kết nối Internet và card mạng Internal Network để kết nối mạng LAN3. Khi khởi động máy ảo, card NAT sẽ được tự động gán địa chỉ IP theo cấu hình NAT của Oracle VirtualBox, thông thường là 10.0.2.15 và Gateway ra Internet (chính là máy host Windows) có địa chỉ 10.0.2.2. Trường hợp card mạng này chưa được cấp địa chỉ IP thì có thể sử dụng lệnh dhclient -v để yêu cầu Virtual Box cấu hình địa chỉ IP cho nó. Với card mạng còn lại, cấu hình địa chỉ IP:

> ifconfig eth1 192.168.2.2/24
> ifconfig -a
eth1      Link encap:Ethernet  HWaddr 08:00:27:98:CA:2E
          inet addr:192.168.2.2  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe98:ca2e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:158 errors:0 dropped:0 overruns:0 frame:0
          TX packets:45 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:20307 (19.8 KiB)  TX bytes:6399 (6.2 KiB)

eth2      Link encap:Ethernet  HWaddr 08:00:27:81:E6:AD
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe81:e6ad/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1580 (1.5 KiB)  TX bytes:1684 (1.6 KiB)

> ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=43 time=66.2 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=43 time=65.6 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=43 time=66.1 ms
			 

Có thể thấy rằng router R3 đã được cấu hình tự động trên card mạng eth2 với địa chỉ 10.0.2.15 (đây là địa chỉ mặt ngoài của router R3). Sử dụng lệnh ping đến máy chủ DNS của Google (địa chỉ 8.8.8.8) để kiểm tra kết nối Internet. Cuối cùng, cần cấu hình bảng routing cho router R3. Cần bổ sung thêm 2 đường định tuyến đến LAN1 và LAN2. Ngoài ra, do được cấu hình NAT tự động, đường định tuyến mặc định ra Internet (0.0.0.0) đã được thêm vào từ trước với gateway là 10.0.2.2 (chính là máy host của Virtual Box):

> route add -net 192.168.1.0/25 gw 192.168.2.1
> route add -net 192.168.1.128/25 gw 192.168.2.1
> route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     192.168.2.1     255.255.255.128 UG    0      0        0 eth3
192.168.1.128   192.168.2.1     255.255.255.128 UG    0      0        0 eth3
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 eth3
10.0.2.0        0.0.0.0         255.255.255.0   U     0      0        0 eth4
0.0.0.0         10.0.2.2        0.0.0.0         UG    0      0        0 eth4

Bước 4: Cấu hình máy trạm cho LAN3

Khác với LAN1, do không có DHCP server, các máy trạm của LAN3 chỉ có thể được cấu hình tĩnh. Có thể thiết lập thông số cấu hình mặc định cho trạm như trong bước 2, hoặc thiết lập tức thời như sau:

> ifconfig eth0 192.168.2.15/24
> route add -net 0.0.0.0 gw 192.168.2.2
> route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0         192.168.2.2     0.0.0.0         UG    0      0        0 eth0

Bước 5: Kiểm tra hệ thống

Dùng lệnh ping để kiểm tra kết nối từ máy trạm trong LAN1 đến máy trạm trong LAN3. Lưu ý rằng vì lý do an ninh, iptables mặc định chặn tất cả các gói tin được chuyển tiếp qua và thông báo cho trạm gửi bằng một gói tin ICMP “Destination Host Prohibited”. Điều này thể hiện khi ping từ một trạm đến một trạm khác và nhận được thông báo lỗi:

> ping 192.168.2.15
PING 192.168.2.15 (192.168.2.15) 56(84) bytes of data.
From 192.168.1.1 icmp_seq=1 Destination Host Prohibited
From 192.168.1.1 icmp_seq=2 Destination Host Prohibited
From 192.168.1.1 icmp_seq=3 Destination Host Prohibited

Để xử lý vấn đề này, cần tắt chức năng chặn gói tin tại các router. Trên các router R1,R2,R3, hiển thị các luật iptables:

> iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            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

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Có thể thấy ở chain FORWARD đang có một luật reject tất cả các gói tin và trả về bằng một gói tin ICMP. Cần bỏ luật này đi:

> iptables -D FORWARD -j REJECT --reject-with icmp-host-prohibited
> iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            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

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Sau khi bỏ luật này trên tất cả các router, trạm tại LAN1 sẽ ping thành công đến trạm LAN3. Cũng có thể hiển thị đường đi của gói tin giữa 2 trạm này bằng lệnh traceroute:

> ping 192.168.2.15
PING 192.168.2.15 (192.168.2.15) 56(84) bytes of data.
64 bytes from 192.168.2.15: icmp_seq=1 ttl=61 time=7.19 ms
64 bytes from 192.168.2.15: icmp_seq=2 ttl=61 time=2.02 ms
64 bytes from 192.168.2.15: icmp_seq=3 ttl=61 time=2.10 ms

> traceroute -n 192.168.2.15
traceroute to 192.168.2.15 (192.168.2.15), 30 hops max, 60 byte packets
1  192.168.1.1  0.693 ms  0.522 ms  0.485 ms
2  192.168.1.130  5.982 ms  5.936 ms  5.236 ms
3  192.168.2.15  6.734 ms  6.572 ms  6.362 ms

Bước 6: Xử lý tình huống Redirect Host

Một điều rất thú vị là khi đứng ở trạm trong mạng LAN3 và ping đến trạm mạng LAN1 thì thành công nhưng nhận được thêm thông tin Redirect Host:

> ping 192.168.1.20
PING 192.168.1.20 (192.168.1.20) 56(84) bytes of data.
From 192.168.2.2: icmp_seq=1 Redirect Host(New nexthop: 192.168.2.1)
64 bytes from 192.168.1.20: icmp_seq=1 ttl=62 time=4.24 ms
From 192.168.2.2: icmp_seq=2 Redirect Host(New nexthop: 192.168.2.1)
64 bytes from 192.168.1.20: icmp_seq=2 ttl=62 time=5.05 ms
From 192.168.2.2: icmp_seq=3 Redirect Host(New nexthop: 192.168.2.1)
64 bytes from 192.168.1.20: icmp_seq=3 ttl=62 time=1.90 ms

Thông điệp được gửi về máy trạm từ địa chỉ 192.168.2.1 (là router R2). Lý do như sau. Khi gói tin gửi đi từ trạm trong LAN3, nó được chuyển đến Gateway của LAN3 là router R3. R3 kiểm tra bảng routing và chuyển tiếp gói tin đến R2. Tại đây, R2 kiểm tra gói tin có địa chỉ nguồn là 192.168.2.15, nằm cùng một mạng với một kết nối của mình (có địa chỉ 192.168.2.1). Như vậy, đã có tình huống định tuyến vòng, tức là gói tin đáng nhẽ có thể đi trực tiếp đến R2 từ trạm nguồn, nhưng thực tế nó đã phải đi qua một router khác (là R3). Điểm không hợp lý này đã được trình bày trong phần 3.1.2 khi lựa chọn R2 hay R3 là Gateway của LAN3. Giải pháp là các trạm trong LAN3 cần được cung cấp thêm một Gateway nữa (là R2). Khi gửi gói tin ra bên ngoài, trạm này nếu nhận được thông điệp Redirect Host từ R2 sẽ tự điều chỉnh để sử dụng sang Gateway này:

> route add default gw 192.168.2.1
> route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0         192.168.2.1     0.0.0.0         UG    0      0        0 eth0
0.0.0.0         192.168.2.2     0.0.0.0         UG    0      0        0 eth0

> ping 192.168.1.20
PING 192.168.1.20 (192.168.1.20) 56(84) bytes of data.
64 bytes from 192.168.1.20: icmp_seq=1 ttl=62 time=2.45 ms
64 bytes from 192.168.1.20: icmp_seq=2 ttl=62 time=1.88 ms
64 bytes from 192.168.1.20: icmp_seq=3 ttl=62 time=1.70 ms
64 bytes from 192.168.1.20: icmp_seq=4 ttl=62 time=2.04 ms