Bài số 1: Cấu hình liên mạng với các router

Sử dụng máy ảo Oracle Virtual Box để thiết lập mô hình kết nối liên mạng như hình vẽ bên trên. Các bước tiến hành bao gồm:

  • Bước 1: Chuẩn bị các máy ảo CentOS và giải lập mạng vật lý.
  • Bước 2: Cấu hình địa chỉ IP cho các router.
  • Bước 3: Cấu hình bảng routing tĩnh cho các router.
  • Bước 4: Kiểm tra kết nối liên mạng.

Bước 1: Chuẩn bị các máy ảo CentOS và giả lập mạng vật lý

Tạo máy ảo CentOS để làm các router (R1, R2, R3, R4) với 3 card mạng. Card thứ nhất sử dụng NAT để kết nối ra Internet thông qua đường kết nối của máy host Virtual Box. Kết nối Internet này sẽ cần để download và cài đặt thêm các phần mềm cần thiết cho router. Lưu ý khi tạo card mạng mới cần thay đổi địa chỉ MAC để không bị trùng nhau.


Card mạng thứ 2&3 của các router CentOS được thiết lập kiểu Internal Network để tạo các kết nối trong mạng ảo. Khi thiết lập kiểu kết nối mạng Internal Network, cần đưa vào tham số Network Name phù hợp. Hai router cùng kết nối vào một mạng vật lý (ảo) phải được khai báo với cùng Network Name. Các mạng vật lý ảo khác nhau phải được gán Network Name khác nhau. Điều này đảm bảo để khi VirtualBox xử lý các frame tầng 2 (truyền dạng broadcast) thì các mạng vật lý khác nhau sẽ không nhận được các frame lẫn lộn của nhau. Bảng sau đây mô tả ánh xạ giữa các mạng vật lý ảo và Network Name tương ứng:

Network Address Network Name>

192.168.1.0/24

intnet0

192.168.2.0/25

intnet1

192.168.2.128/25

intnet2

192.168.3.0/24

intnet3

10.0.0.0/8

intnet

Tương tự như với card mạng NAT, khi tạo nhiều card mạng mới cần kiểm tra và thay đổi địa chỉ MAC để không bị trùng nhau.


Bước 2: Cấu hình địa chỉ IP cho các router

Sau khi khởi động máy ảo CentOS, card mạng thứ nhất (được đặt tên là eth1) được gán địa chỉ IP tự động (giả sử là 10.0.2.15). Có thể kiểm tra kết nối ra Internet bằng lệnh ping đến một máy nào đó trên mạng Internet (ví dụ ping đến máy chủ DNS của Google tại địa chỉ 8.8.8.8):

[root@R1 ~]# ifconfig -eth1
eth1      Link encap:Ethernet  HWaddr 08:00:27:76:80:1E  
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:17 errors:0 dropped:0 overruns:0 frame:0
          TX packets:37 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4973 (4.8 KiB)  TX bytes:4162 (4.0 KiB)

[root@edu ~]# 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=42 time=70.6 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=42 time=69.5 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=42 time=68.8 ms
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2496ms
rtt min/avg/max/mdev = 68.874/69.684/70.668/0.802 ms
			 

Thiết lập địa chỉ IP cho các card mạng kết nối mạng ảo (được đặt tên là eth1 và eth2):

[root@R1 ~]# ifconfig eth2 192.168.1.1/24
[root@R1 ~]# ifconfig eth3 192.168.2.1/25

[root@R1 ~]# ifconfig -a
eth1      Link encap:Ethernet  HWaddr 08:00:27:76:80:1E  
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:17 errors:0 dropped:0 overruns:0 frame:0
          TX packets:37 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4973 (4.8 KiB)  TX bytes:4162 (4.0 KiB)

eth2      Link encap:Ethernet  HWaddr 08:00:27:2E:E1:03  
          inet addr:192.168.1.1  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fec0::1/64 Scope:Site
          inet6 addr: fe80::a00:27ff:fe2e:e103/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:76263 errors:0 dropped:0 overruns:0 frame:0
          TX packets:27477 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:85133778 (81.1 MiB)  TX bytes:2693674 (2.5 MiB)

eth3      Link encap:Ethernet  HWaddr 08:00:27:47:E1:04  
          inet addr:192.168.2.1  Bcast:192.168.2.127  Mask:255.255.255.128
          inet6 addr: fec1::1/64 Scope:Site
          inet6 addr: fe80::a00:27ff:fe47:e104/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:33638 errors:0 dropped:0 overruns:0 frame:0
          TX packets:78514 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:3914696 (3.7 MiB)  TX bytes:87320150 (83.2 MiB)
			 

Sau khi thiết lập các địa chỉ IP cho các kết nối mạng, bảng routing của router được tự động thiết lập như sau:

[root@R1 ~]# 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.128 U     0      0        0 eth4
192.168.1.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 eth1
0.0.0.0         10.0.2.2        0.0.0.0         UG    0      0        0 eth1

Bước 3: Cấu hình bảng routing tĩnh cho các router

Các đường định tuyết trực tiếp và mặc định (0.0.0.0) cho phép router chuyển tiếp các gói tin đến các mạng mà nó kết nối, hoặc chuyển tiếp mặc định (đến các mạng không được liệt kê trong bảng routing). Cần bổ sung thêm các đường định tuyến giám tiếp đến mạng khác trong hệ thống. Ví dụ, đổi với R2, các mạng gián tiếp là 192.168.1.0/24 và 192.168.3.0/24:

[root@R2 ~]# route add -net 192.168.1.0/24 gw 192.168.2.1
[root@R2 ~]# route add -net 192.168.3.0/24 gw 192.168.2.130
[root@R2 ~]# route add -net 10.0.0.0/8 gw 192.168.2.130

[root@R2 ~]# 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.128 U     0      0        0 eth3
192.168.2.128   0.0.0.0         255.255.255.128 U     0      0        0 eth4
192.168.3.0     192.168.2.130   255.255.255.0   UG    0      0        0 eth4
192.168.1.0     192.168.2.1     255.255.255.0   UG    0      0        0 eth3
10.0.0.0        192.168.2.130   255.0.0.0       UG    0      0        0 eth4
0.0.0.0         10.0.2.2        0.0.0.0         UG    0      0        0 eth1

Riêng với router R1, theo hình trạng kết nối mạng thì tất cả các đường định tuyến gián tiếp từ R1 đi ra các mạng khác đều thông qua R2 nên có thể cấu hình đơn giản như sau:

[root@R1 ~]# route add default gw 192.168.2.2
[root@R1 ~]# 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.128 U     0      0        0 eth3
192.168.2.128   0.0.0.0         255.255.255.128 U     0      0        0 eth4
0.0.0.0         192.168.2.2     0.0.0.0         UG    0      0        0 eth4

Có thể thiết lập cố định các địa chỉ IP và các đường định tuyến bằng các file script ifcfg-ethXroute-ethX:

[root@R2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth3
DEVICE=eth3
ONBOOT=yes
NAME=eth3
HWADDR=08:00:27:A9:E2:03
IPADDR=192.168.2.2
NETMASK=255.255.255.128

[root@R2 ~]# cat /etc/sysconfig/network-scripts/route-eth3
192.168.1.0/24 via 192.168.2.1

Lưu ý rằng cho dù có nhiều kết nối mạng nhưng CentOS mặc định không bật chức năng “forward” các gói tin IP giữa các kết nói mạng này. Tức là máy CentOS thuần túy chỉ là một trạm có nhiều kết nối mạng chứ không phải là một router. Tham số hệ thống net.ipv4.ip_forward xác định chức năng forward đang được bật hay đóng. Cần thiết lập giá trị (bằng 1) cho tham số này để biến máy CentOS thành một router. Có thể sử dụng lệnh sysctl để hiển thị giá trị các tham số cấu hình hệ thống hoặc để đặt lại tham số cấu hình này:

[root@R2 ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0

[root@R2 ~]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1

Có thể sửa giá trị mặc định của tham số này trong file /etc/sysctl.conf:

[root@R2 ~]# nano /etc/sysctl.conf
# Controls IP packet forwarding
net.ipv4.ip_forward = 1

Bước4: Kiểm tra kết nối liên mạng

Sau khi cấu hình tất cả các đường định tuyến có thể xảy ra trên R1, R2, R3, R4, có thể kiểm tra hệ thống đã chạy thông bằng cách đứng trên R1 và ping đến R2, R3, R4:

[root@R2 ~]# ping 192.168.2.2
PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.
64 bytes from 192.168.2.2: icmp_seq=1 ttl=64 time=0.502 ms
64 bytes from 192.168.2.2: icmp_seq=2 ttl=64 time=0.596 ms
64 bytes from 192.168.2.2: icmp_seq=3 ttl=64 time=0.550 ms
^C
--- 192.168.2.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2325ms
rtt min/avg/max/mdev = 0.502/0.549/0.596/0.042 ms

[root@R2 ~]# ping 192.168.2.130
PING 192.168.2.130 (192.168.2.130) 56(84) bytes of data.
64 bytes from 192.168.2.130: icmp_seq=1 ttl=63 time=2.94 ms
64 bytes from 192.168.2.130: icmp_seq=2 ttl=63 time=3.55 ms
64 bytes from 192.168.2.130: icmp_seq=3 ttl=63 time=0.997 ms
^C
--- 192.168.2.130 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2364ms
rtt min/avg/max/mdev = 0.997/2.497/3.555/1.090 ms

[root@R2 ~]# ping 192.168.3.2
PING 192.168.3.2 (192.168.3.2) 56(84) bytes of data.
64 bytes from 192.168.3.2: icmp_seq=1 ttl=62 time=2.91 ms
64 bytes from 192.168.3.2: icmp_seq=2 ttl=62 time=1.69 ms
64 bytes from 192.168.3.2: icmp_seq=3 ttl=62 time=1.54 ms
^C
--- 192.168.3.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2350ms
rtt min/avg/max/mdev = 1.541/2.050/2.919/0.618 ms

[root@R2 ~]# ping 10.0.2.15
PING 10.0.2.15 (10.0.2.15) 56(84) bytes of data.
64 bytes from 10.0.2.15: icmp_seq=1 ttl=64 time=0.083 ms
64 bytes from 10.0.2.15: icmp_seq=2 ttl=64 time=0.094 ms
64 bytes from 10.0.2.15: icmp_seq=3 ttl=64 time=0.100 ms
^C
--- 10.0.2.15 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2351ms

Hoặc có thể đứng tại R1 sử dụng traceroute để hiển thị đường đi của gói tin đến R4:

[root@R2 ~]# traceroute -n 192.168.3.2
traceroute to 192.168.3.2 (192.168.3.2), 30 hops max, 60 byte packets
1  192.168.2.2  0.976 ms  3.481 ms  3.404 ms
2  192.168.2.130  3.329 ms  3.255 ms  3.151 ms
3  192.168.3.2  3.047 ms  4.248 ms  4.118 ms

Trường hợp lệnh ping cho thấy mạng không kết nối thông suốt, một khả năng có thể là các tiến trình firewall iptables trên các router đang chặn gói tin đi qua. Cần tắt các firewall này bằng lệnh service iptables stop.

[root@R2 ~]# service iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination        
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0          
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0          
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

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

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination        

[root@R2 ~]# service iptables stop
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]