Xử lý sự cố mạng trên hệ điều hành Linux

Trong bài viết này tôi sẽ giới thiệu cho các bạn khái quát về các sự cố mạng và các bước xử lý những vấn đề này trên hệ điều hành Linux.

1. Khái quát về các sự cố trên cấu hình mạng trong Linux

Trong HĐH Linux, các sự cố về cấu hình mạng thương xuất hiện dưới 2 hình thức. Thứ nhất, thông tin phản hồi từ máy chủ bị chậm. Thứ hai, các kết nối bị tắc nghẽn, thiếu kết nối vật lý…. Các sự cố này có thể xảy ra do những nguyên nhân dưới đây:

1.1. Mạng hoạt động chậm.

– Do card mạng không tương thích về tốc độ và xử lý duplex.

– Có thể do mạng bị tắc nghẽn.

– Định tuyến sai

– Cáp không đạt tiêu chuẩn

– Bị ảnh hưởng bởi điện năng đang tiêu thụ.

– Server bị quá tải tại thời điểm điều khiển cuối cùng của kết nối

 1.2. Kết nối không tốt

Trong các vấn đề bàn bạc thì bị ngắt kết nối thực sự là tệ hại nhất cho người quản trị viên. Các nguyên nhân dẫn đến mất kết nối:

+ Nguồn điện có vấn đề

+ Do 1 ứng dụng trên máy chủ từ xa hoặc là do chính máy chủ bị shutdown

 1.3. Những vấn đề cơ bản về cáp và kết nối mạng

Máy chủ sẽ không thể giao tiếp với bất kỳ thiết bị nào trên hệ thống mạng trừ khi “đường kết nối” của card mạng được bật lên. Khi đó ta có thể khẳng đinh đươc kết nối giữa server và các thiết bị switch/router đang hoạt động ổn định.

Kết nối không tốt có thể do các nguyên nhân sau đây:

+ Cáp kết nối xấu, bị hỏng,…

+ Switch/router ma server kết nối đến bị tắt

+ Cắm cáp sai vị trí, hoặc không đúng kỹ thuật,..


2. Xử lý sự cố cấu hình mạng trên Linux

2.1. Kiểm tra hoạt động kết nối

Đây là phương pháp cơ bản trong xử lý sự cố. Nó giúp ta theo dõi được tình trạng hoạt động của NIC trên máy tính của chúng ta. Để làm được việc đó, ta sẽ sử dụng một số dòng lệnh được trình bày dưới đây.

@ Kiểm tra các Interface đang hoạt động

Lệnh “ipconfig” sẽ cho ta biết tất cả các Interface đang hoạt động. Interface sẽ không hiển thị nếu chúng ta tắt nó đi

[root@bigboy tmp]# ifconfig

 Chú ý: Interface sẽ hiện lên nếu ta kích hoạt lại nhưng nó sẽ không có liên kết. Cách thức để liên kết hoạt động trở lại sẽ được đề cập đến trong những phần sau.

@ Kiểm tra tất cả các Interface

Lệnh “ipconfig –a” cung cấp thông tin tất cả Network Interface. Khi mà Interface bị người quản trị hệ thống tắt đi hoặc là nó không có chức năng gì thì sẽ không hiển thị được địa chỉ IP và UP ở dòng thứ 2 khi xuất ra màn hình. Điều này được thể hiện rất rõ ở vd bên dưới.

Khi tắt Interface

 wlan0   Link encap:Ethernet  HWaddr 00:06:25:09:6A:D7

BROADCAST MULTICAST  MTU:1500  Metric:1 (Địa chỉ IP và UP không được show ra)

RX packets:2924 errors:0 dropped:0 overruns:0 frame:0

TX packets:2287 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:100

RX bytes:180948 (176.7 Kb)  TX bytes:166377 (162.4 Kb)

Interrupt:10 Memory:c88b5000-c88b6000

 Khi bật Interface

 wlan0    Link encap:Ethernet  HWaddr 00:06:25:09:6A:D7

inet addr:216.10.119.243  Bcast:216.10.119.255 (Địa chỉ IP và UP đã được show ra)

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:2924 errors:0 dropped:0 overruns:0 frame:0

TX packets:2295 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:100

RX bytes:180948 (176.7 Kb)  TX bytes:166521 (162.6 Kb)

Interrupt:10 Memory:c88b5000-c88b6000

@ Những điều cần lưu ý với DHCP

Các DHCP client sẽ tự động gửi cho card mạng và địa chỉ IP của chúng bắt đầu từ địa chỉ 169.254.x.x  cho đến khi nào chúng có thể liên lạc được với DHCP server. Một khi đã kết nối thành công, các DHCP client sẽ cấu hình lại địa chỉ IP của mình dựa vào các giá trị đã được cung cấp bởi DHCP server. Khi một interface với địa chỉ 169.254.xx cho biết đã thất bại trong khi làm việc với DHCP server thì ta phải kiểm tra lại kết nối cáp, định tuyến và cấu hình  DHCP server để khắc phục vấn đề.

@ Dùng lệnh “ping” để kiểm tra kết nối mạng

Khi ta gặp 1 vấn đề nào liên quan đến mạng, phương pháp ta thường sử sụng nhất để kiểm tra là dùng lệnh “ping”. “Ping“ sẽ gửi 1 gói ICMP request từ máy nguồn đến các máy đích hoặc thiết bị được kết nối với nó. Nếu nhận được gói request của máy nguồn thì máy đích sẽ phản hồi thông tin lại. Khi máy đích không reply lại thì có thể do những nguyên nhân sau:

+ Địa chỉ IP trên máy chủ không tồn tại

+ Máy chủ đã được cấu hình không phản hồi lại khi nhận gói tin từ công cụ ping

+ Tường lửa hoặc router đã khóa đường đi của gói ICMP

+ Do người dùng định tuyến sai. Lúc này ta phải kiểm tra lại cấu hình định tuyến và subnet mask trên cả local server và remote server cùng với tất cả router ở giữa. Một vấn đề mang tính chất cổ điển của việc định tuyến sai trên server là server chỉ có khả năng ping trong mạng nội bộ. Ta có thể sử dụng traceroute để kiểm tra vấn đề trên.

+ Địa chỉ IP hoặc subnet mask của máy đích không tồn tại.

Có rất nhiều thông tin phản hồi từ gói ICMP reponse giúp ta rất nhiều trong việc troubleshooting.

Lệnh “ping” trong Linux sẽ gửi các gói tin liên tục 1 giây 1 lần cho đến khi ta nhấn tổ hợp phím Ctrl + C để dừng lại. Dưới đây là ví dụ trong việc ping thành công từ máy nguồn 192.168.1.100 đến máy đích có địa chỉ IP 192.168.1.101

root@smallfry tmp]# ping 192.168.1.101

PING 192.168.1.101 (192.168.1.101) from 192.168.1.100 : 56(84) bytes of data.

64 bytes from 192.168.1.101: icmp_seq=1 ttl=128 time=3.95 ms

64 bytes from 192.168.1.101: icmp_seq=2 ttl=128 time=7.07 ms

64 bytes from 192.168.1.101: icmp_seq=3 ttl=128 time=4.46 ms

64 bytes from 192.168.1.101: icmp_seq=4 ttl=128 time=4.31 ms

— 192.168.1.101 ping statistics —

4 packets transmitted, 4 received, 0% loss, time 3026ms

rtt min/avg/max/mdev = 3.950/4.948/7.072/1.242 ms

[root@smallfry tmp]#

Có thể máy nguồn sẽ nhận được thông báo “Destination Host Unreachable” khi ping tới 1 máy đích nào đó. Nguyên nhân dẫn đến việc này là do router hoặc server của ta đã nhận biết được IP của máy đích, nhưng nó không phản hồi các gói response. Một vài nguyên nhân dẫn đến điều này:

Nếu ta đang cố gắng ping 1 host nào đó được kết nối trực tiếp với hệ thống mạng:

+ Các client hoặc server bị tắt hoặc bị ngắt kết nối trên đường mạng.

+ Card mạng không được cấu hình duplex đúng, ta có thể xác minh điều này bằng lệnh “mii-tool”

+ Có thể do cáp sử dụng để kết nối trong mạng Linux không phù hợp. Có 2 loại cáp cơ bản là cáp thẳng và cáp chéo.

+ Trong trường hợp sử dụng wireless, SSID không đúng hoặc mã hóa khóa bị sai.

Nếu ta cố gắng ping một host nào đó trên remote server:

Thiết bị mạng không có đường định tuyến trong bảng định tuyến của nó tới mạng đích và gửi 1 gói ICMP reply loại 3 để trả về những thông báo. Các thông báo trả về có thể là Destination Host Unreachable hoặc Destination Network Unreachable.

[root@smallfry tmp]# ping 192.168.1.105PING 192.168.1.105 (192.168.1.105) from 192.168.1.100 : 56(84) bytes of data.

From 192.168.1.100 icmp_seq=1 Destination Host Unreachable

From 192.168.1.100 icmp_seq=2 Destination Host Unreachable

From 192.168.1.100 icmp_seq=3 Destination Host Unreachable

From 192.168.1.100 icmp_seq=4 Destination Host Unreachable

From 192.168.1.100 icmp_seq=5 Destination Host Unreachable

From 192.168.1.100 icmp_seq=6 Destination Host Unreachable

— 192.168.1.105 ping statistics —

8 packets transmitted, 0 received, +6 errors, 100% loss, time 7021ms, pipe 3

[root@smallfry tmp]#

@ Sử dụng telnet để kiểm tra kết nối mạng.

Một cách đơn giản được đề cập tới là nếu một remote server đang lắng nghe trên môt cổng TCP xác định ta có thể sử dụng lệnh “telnet” để kiểm tra. Mặc định, telnet sẽ thử kết nối trên cổng TCP 23, nhưng ta có thể chỉ định những cổng TCP khác bằng các gõ thêm các cổng đó sau địa chỉ IP đích. HTTP dùng cổng TCP 80, HTTPS thì dùng cổng 443.

Dưới đây là ví dụ về việc kiểm tra server 192.168.1.102 trên cổng TCP 22 theo cơ chế bảo mật SSH:

[root@bigboy tmp]# telnet 192.168.1.102 22

Dưới đây là 1 số hướng dẫn hữu ích để giúp ta cô lập các nguyên nhân xảy ra lỗi khi sử dụng telnet để xử lý sự cố:

+ Kiểm tra kết nối trên máy tính hoặc remote server

+ Kiểm tra kết nối trên server. Thử tạo các kết nối đến địa chỉ loopback cũng giống như địa chỉ IP của NIC. Nếu server đang chạy 1 gói phần mềm tường lửa, chẳng hạn như IPTABLES trong Linux, tất cả các kết nối loopback được chấp nhận, nhưng thỉnh thoảng các kết nối tới một vài cổng TCP mong muốn lại bị chặn.

+ Kiểm tra các kết nối từ những server khác trên cùng 1 đường mạng chẳng hạn như các server đích. Điều này giúp ta loại bỏ được sự ảnh hưởng của bất kì tường lửa nào bảo vệ toàn bộ hệ thống mạng từ bên ngoài.

 2.2. Linux telnet Troubleshooting

Chúng ta biết rằng đa số server của Linux cài đặt IPTABLES là tường lửa mặc định. Đây thường là nguyên nhân của những vấn đề về kết nối và quy tắc tường lửa phải được cập nhật một cách chính xác. Trong một số trường hợp thì hệ thống mạng được bảo vệ bởi tường lửa, IPTABLES được tắt một cách an toàn, Ta có thể sử dụng lệnh “/etc/int.d/iptaples” trên server đích để xác định xem IPTABLES có đang chạy hay không.

@ Kết nối thành công

Với hệ điều hành Linux, một kết nối thành công thì sẽ hiển thị những thông tin như bên dưới. Ở vd này là server 192.168.1.102 trên cổng TCP 22 (SSH).

 [root@bigboy tmp]# telnet 192.168.1.102 22

Trying 192.168.1.102…

Connected to 192.168.1.102.

Escape character is ‘^]’.

SSH-1.99-OpenSSH_3.4p1

^]

telnet> quit

Connection closed.

[root@ bigboy tmp]#

Nếu không muốn xem thông tin hiện ra nữa thì ta sử dụng “Ctrl + ]”, tương tư như lệnh “ping” là “Ctrl + C”.

Lưu ý trong nhiều trường hợp ta có thể kết nối thành công trên remote server trên cổng mà ta mong muốn, nhưng các ứng dụng lại không làm việc. Điều này được hình thành do các ứng dụng bị cấu hình sai trong khi kết nối đến hệ thống lại hoạt động tốt.

@ Thông báo từ chối kết nối

Ta nhận được các từ chối kết nối từ 1 trong những lý do sau đây:

+ Ứng dụng mà ta đang cố gắng kiểm tra thì chưa được bật trên remote server.

+ Tường lửa chặn và từ chối kết nối đó.

Đây là 1 vd điển hình:

[root@bigboy tmp]# telnet 192.168.1.100 22Trying 192.168.1.100…

telnet: connect to address 192.168.1.100: Connection refused

[root@bigboy tmp]#

@ telnet Timeout or Hanging

Lệnh telnet sẽ hủy bỏ các gói request sau khi chờ nhưng không thấy máy đích trả lời trong một khoảng thời gian xác định trước. Khoảng thời gian đó gọi là timeout (thời gian chờ). Trong một số trường hợp, telnet sẽ không hủy bỏ nhưng nó sẽ chờ đợi vô thời hạn. Ta gọi hiện tượng đó là “bị treo”. Những điều này có thể gây ra do những lý do bên dưới đây:

+ Remote server không tồn tại trên mạng đích. Có thể nó đã bị tắt.

+ Một tường lửa được thiết lập chặn nhưng không từ chối các kết nối. Có nghĩa là thay vì mạng đích sẽ từ chối gói request một cách tức thì thì nó lại “án binh bất động”, chính vì vậy đã dẫn đến tình trạng “Connection time out”.

[root@bigboy tmp]# telnet 216.10.100.12 22Trying 216.10.100.12…

telnet: connect to address 216.10.100.12: Connection timed out

[root@bigboy tmp]#

Trên đây tôi đã trình bày cho các bạn khái quát về các sự cố mạng và một số cách khắc phục trên Linux. Thoạt nhìn các cách xử lý trên nặng về khái niệm “chẩn đoán”, nhưng thực ra nó là các hướng giải quyết tốt và cơ bản nhất để xử lý các sự cố mạng trên hệ điều hành Linux.

BÌNH LUẬN

Please enter your comment!
Please enter your name here