Cấu hình PPPoE trên Linux CentOS 7 cho phép máy chủ kết nối trực tiếp đến đường truyền Internet sử dụng tài khoản PPPoE do nhà mạng cung cấp. Cách triển khai này thường được sử dụng khi máy chủ Linux đóng vai trò router, gateway Internet, máy chủ NAT hoặc cần quay trực tiếp kết nối PPPoE thay vì sử dụng router riêng.
Trong bài viết này, chúng ta sẽ tìm hiểu PPPoE là gì, cách cài đặt gói PPPoE trên CentOS 7, cấu hình tài khoản nhà mạng, thiết lập tự động kết nối khi khởi động và kiểm tra trạng thái đường truyền.
Lưu ý: CentOS 7 đã hết vòng đời hỗ trợ chính thức. Hướng dẫn dưới đây phù hợp với các hệ thống CentOS 7 đang vận hành thực tế. Với hệ thống mới, nên cân nhắc sử dụng Rocky Linux, AlmaLinux hoặc một bản Linux còn được hỗ trợ lâu dài.
PPPoE là gì?
PPPoE là viết tắt của Point-to-Point Protocol over Ethernet, nghĩa là giao thức PPP chạy trên nền Ethernet.
PPPoE thường được các nhà cung cấp dịch vụ Internet sử dụng để xác thực thuê bao bằng username và password. Thay vì máy chủ nhận địa chỉ IP trực tiếp từ DHCP, hệ thống sẽ tạo một giao diện PPP logic sau khi quá trình xác thực thành công.
Một kết nối PPPoE thường có các thành phần:
- Card mạng vật lý kết nối đến modem, ONT hoặc thiết bị mạng của nhà cung cấp.
- Giao diện Ethernet như eth0 hoặc tên interface tương ứng.
- Tài khoản PPPoE gồm username và password.
- Giao diện PPP như ppp0.
- Địa chỉ IP được nhà mạng cấp sau khi kết nối thành công.
- DNS được cấu hình thủ công hoặc nhận tự động từ nhà mạng.
Sau khi kết nối thành công, máy chủ có thể sử dụng giao diện PPPoE để truy cập Internet.
PPPoE hoạt động như thế nào?
PPPoE gồm hai giai đoạn chính: Discovery và Session.
Giai đoạn Discovery
Ở giai đoạn đầu, máy khách PPPoE tìm kiếm Access Concentrator của nhà mạng.
Quá trình này thường gồm các gói:
- PADI: Máy khách gửi yêu cầu tìm kiếm dịch vụ PPPoE.
- PADO: Access Concentrator phản hồi dịch vụ có sẵn.
- PADR: Máy khách lựa chọn Access Concentrator và gửi yêu cầu thiết lập phiên.
- PADS: Access Concentrator xác nhận phiên và cấp Session ID.
Sau khi hoàn tất Discovery, hai bên có thể bắt đầu phiên PPPoE.
Giai đoạn Session
Trong giai đoạn Session, kết nối PPP được thiết lập giữa máy khách và thiết bị phía nhà mạng.
Tài khoản PPPoE được xác thực, sau đó hệ thống thực hiện đàm phán các thông số kết nối và nhận địa chỉ IP.
Trong quá trình hoạt động, dữ liệu Internet được truyền thông qua giao diện PPPoE.
Khi phiên kết nối bị đóng, hệ thống có thể thực hiện lại quá trình Discovery để tạo một phiên PPPoE mới.

Mô hình kết nối PPPoE trên CentOS 7
Một mô hình phổ biến có thể được hình dung như sau:
Internet
|
Nhà mạng
|
ONT / Modem / Bridge
|
eth0
|
CentOS 7
|
ppp0
|
Internet
Trong trường hợp CentOS 7 đóng vai trò router cho mạng LAN, có thể triển khai:
Internet
|
PPPoE
|
CentOS 7
|
eth1
|
LAN
Khi đó:
- eth0 kết nối với modem hoặc ONT ở chế độ bridge.
- ppp0 là giao diện PPPoE ra Internet.
- eth1 kết nối với mạng LAN.
- CentOS 7 thực hiện routing và NAT cho các thiết bị phía LAN.
Chuẩn bị trước khi cấu hình PPPoE
Trước khi bắt đầu, cần chuẩn bị:
- Máy chủ chạy CentOS 7.
- Ít nhất một card mạng Ethernet.
- Modem hoặc ONT hỗ trợ bridge.
- Tài khoản PPPoE do nhà mạng cung cấp.
- Username PPPoE.
- Password PPPoE.
- DNS nếu muốn cấu hình thủ công.
Nếu sử dụng máy chủ làm router, nên có ít nhất hai interface mạng.
Ví dụ:
eth0: kết nối WAN
eth1: kết nối LAN
Nếu chỉ cần máy chủ quay PPPoE trực tiếp để truy cập Internet, một interface Ethernet có thể đáp ứng nhu cầu.
Kiểm tra card mạng trên CentOS 7
Trước tiên kiểm tra danh sách network interface:
ip address show
Hoặc:
ip link show
Ví dụ kết quả:
1: lo: <LOOPBACK,UP,LOWER_UP>
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP>
3: eth1: <BROADCAST,MULTICAST>
Trong ví dụ này, eth0 có thể được sử dụng làm interface kết nối đến modem hoặc ONT.
Tùy phiên bản hoặc cách đặt tên interface, máy chủ có thể sử dụng tên khác như:
ens160
ens192
enp1s0
enp2s0
Không nên mặc định sử dụng eth0 nếu hệ thống thực tế đang dùng tên interface khác.
Có thể xác định interface đang có link bằng:
ip link
Hoặc:
ethtool eth0
Cập nhật package trên CentOS 7
Trước khi cài đặt PPPoE, cập nhật package:
yum update -y
Sau đó kiểm tra package rp-pppoe:
rpm -qa | grep rp-pppoe
Nếu chưa có package, tiến hành cài đặt:
yum install rp-pppoe -y
Kiểm tra lại:
rpm -qa | grep rp-pppoe
Nếu package được cài đặt thành công, hệ thống đã sẵn sàng để cấu hình PPPoE.
Cấu hình PPPoE bằng pppoe-setup
CentOS 7 sử dụng bộ công cụ rp-pppoe, trong đó có chương trình pppoe-setup giúp tạo cấu hình PPPoE tương đối nhanh.
Chạy:
pppoe-setup
Chương trình sẽ lần lượt yêu cầu nhập các thông tin cần thiết.
Bước 1: Nhập username PPPoE
Hệ thống sẽ yêu cầu:
LOGIN NAME
Enter your Login Name:
Nhập username PPPoE do nhà mạng cung cấp.
Ví dụ:
Enter your Login Name: user123456
Không nên sử dụng tài khoản root của Linux nếu đó không phải username PPPoE thực tế.
Bước 2: Chọn card mạng PPPoE
Tiếp theo hệ thống yêu cầu lựa chọn Ethernet interface:
INTERFACE
Enter the Ethernet interface connected to the PPPoE modem
Nếu modem hoặc ONT đang kết nối vào eth0, nhập:
eth0
Nếu interface thực tế là ens160, nhập:
ens160
Điểm quan trọng là interface này phải được kết nối trực tiếp đến thiết bị cung cấp kết nối PPPoE.
Bước 3: Cấu hình kết nối liên tục
Chương trình sẽ hỏi:
Do you want the link to come up on demand,
or stay up continuously?
Nếu muốn kết nối PPPoE luôn được duy trì, chọn:
no
Thông thường đây là lựa chọn phù hợp với máy chủ hoặc router cần Internet hoạt động liên tục.
Nếu chọn kết nối theo nhu cầu, PPPoE có thể được kích hoạt khi có traffic. Tuy nhiên, mô hình này không phù hợp với nhiều máy chủ production cần duy trì kết nối Internet liên tục.
Bước 4: Cấu hình DNS
Tiếp theo chương trình yêu cầu DNS:
Enter the DNS information here:
Có thể sử dụng DNS của nhà mạng hoặc DNS công cộng.
Ví dụ:
8.8.8.8
DNS thứ hai:
1.1.1.1
Nếu nhà mạng tự cung cấp DNS, có thể sử dụng tùy chọn nhận DNS tự động nếu phù hợp với hệ thống.
Bước 5: Nhập password PPPoE
Nhập password do nhà mạng cung cấp:
Please enter your Password:
Please re-enter your Password:
Password sẽ được lưu trong cấu hình PPPoE của hệ thống.
Cần hạn chế quyền truy cập vào các file chứa thông tin xác thực để tránh lộ tài khoản PPPoE.
Bước 6: Cho phép user điều khiển kết nối
Chương trình sẽ hỏi:
Do you want to allow normal user to start or stop DSL connection?
Nếu chỉ quản trị viên mới được phép điều khiển kết nối, có thể chọn:
no
Đối với server production, nên hạn chế quyền điều khiển kết nối PPPoE nếu không cần thiết.
Bước 7: Cấu hình firewall
PPPoE setup có thể hỏi:
Choose a type of firewall (0-2):
Các lựa chọn cơ bản thường gồm:
0 - NONE
1 - STANDALONE
2 - MASQUERADE
NONE
Không tạo firewall rule tự động.
Lựa chọn này phù hợp khi máy chủ đã có hệ thống firewall riêng như firewalld, iptables hoặc firewall nằm ở lớp mạng bên ngoài.
STANDALONE
Thiết lập firewall cơ bản cho máy chủ hoạt động độc lập.
MASQUERADE
Phù hợp với trường hợp CentOS đóng vai trò gateway cho mạng LAN và thực hiện NAT.
Nếu máy chủ đang chạy nhiều dịch vụ như web, SSH, DNS, mail hoặc các ứng dụng khác, không nên phụ thuộc hoàn toàn vào bộ firewall đơn giản của pppoe-setup.
Trong môi trường production, nên xây dựng firewall riêng và kiểm soát rõ các port cần mở.
Bước 8: Tự động quay PPPoE khi khởi động
Chương trình sẽ hỏi:
Do you want to start this connection at boot time?
Chọn:
yes
Khi đó hệ thống sẽ tự động khởi tạo kết nối PPPoE khi CentOS 7 khởi động.
Đây là thiết lập nên sử dụng đối với server hoặc router cần duy trì Internet sau khi reboot.
Hoàn tất cấu hình PPPoE
Sau khi hoàn tất, chương trình sẽ hiển thị thông tin cấu hình và yêu cầu xác nhận.
Nếu các thông tin chính xác, chọn:
y
Cấu hình thường được tạo tại:
/etc/sysconfig/network-scripts/ifcfg-ppp0
Thông tin xác thực PPPoE có thể được lưu trong:
/etc/ppp/chap-secrets
và:
/etc/ppp/pap-secrets
File DNS có thể liên quan đến:
/etc/resolv.conf
Nên kiểm tra quyền truy cập các file chứa username và password PPPoE.
Khởi động kết nối PPPoE
Sau khi cấu hình xong, có thể kích hoạt PPPoE bằng:
ifup ppp0
Nếu kết nối thành công, hệ thống sẽ tạo interface ppp0.
Kiểm tra:
ip address show ppp0
Hoặc:
ip addr
Nếu thấy ppp0 có địa chỉ IP, kết nối PPPoE đã được thiết lập.
Kiểm tra trạng thái PPPoE
Có thể sử dụng:
pppoe-status /etc/sysconfig/network-scripts/ifcfg-ppp0
Nếu kết nối hoạt động, thông tin trả về sẽ cho biết trạng thái của PPPoE session và địa chỉ IP được cấp.
Có thể kiểm tra thêm route:
ip route
Thông thường sẽ xuất hiện default route thông qua giao diện PPPoE.
Kiểm tra kết nối Internet
Sau khi ppp0 đã hoạt động, kiểm tra kết nối bằng IP trước:
ping -c 4 8.8.8.8
Nếu ping thành công, kiểm tra DNS:
ping -c 4 google.com
Nếu ping IP thành công nhưng ping domain thất bại, cần kiểm tra cấu hình DNS.
Có thể kiểm tra DNS:
cat /etc/resolv.conf
Kiểm tra địa chỉ IP public
Địa chỉ IP của PPPoE có thể xem bằng:
ip addr show ppp0
Hoặc:
ip -4 addr show ppp0
Trong trường hợp nhà mạng cấp IP động, địa chỉ này có thể thay đổi sau mỗi lần kết nối lại.
Nếu sử dụng IP động cho dịch vụ server, cần cân nhắc Dynamic DNS hoặc một phương án quản lý địa chỉ phù hợp.
Cấu hình PPPoE tự động reconnect
Đối với server, việc PPPoE tự động kết nối lại sau khi đường truyền bị mất rất quan trọng.
Có thể kiểm tra cấu hình:
vi /etc/sysconfig/network-scripts/ifcfg-ppp0
Tùy cấu hình rp-pppoe, có thể thiết lập các thông số liên quan đến việc duy trì và tự động kết nối lại.
Ví dụ:
ONBOOT=yes
Trong một số cấu hình, có thể gặp:
DEMAND=yes
Tuy nhiên, DEMAND=yes có ý nghĩa kích hoạt kết nối theo nhu cầu và không nên mặc định sử dụng nếu mục tiêu là duy trì PPPoE liên tục.
Đối với server cần đường truyền luôn hoạt động, nên ưu tiên cấu hình kết nối liên tục và kiểm tra cơ chế reconnect của pppd.
Cấu hình PPPoE trong file ifcfg-ppp0
Có thể kiểm tra file:
cat /etc/sysconfig/network-scripts/ifcfg-ppp0
Một cấu hình PPPoE có thể chứa các thông số tương tự:
USERCTL=yes
BOOTPROTO=dialup
NAME=DSLppp0
DEVICE=ppp0
TYPE=xDSL
ONBOOT=yes
PIDFILE=/var/run/pppoe-adsl.pid
PERSIST=yes
Các thông số thực tế có thể khác nhau tùy phiên bản package và quá trình chạy pppoe-setup.
Không nên thay thế toàn bộ file cấu hình bằng một mẫu trên nếu chưa kiểm tra cấu hình được pppoe-setup tạo ra.
Xác định interface PPPoE
Sau khi kết nối, chạy:
ip address show
Ví dụ:
ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP>
inet 113.x.x.x peer 10.x.x.x
Trong đó:
ppp0là giao diện PPPoE.inetlà địa chỉ IPv4 được cấp.peerlà địa chỉ của đầu bên kia PPP connection.
Đây là interface được sử dụng để định tuyến traffic Internet.
PPPoE không kết nối được phải kiểm tra gì?
Nếu chạy:
ifup ppp0
nhưng không nhận được IP, nên kiểm tra theo thứ tự.
Kiểm tra cáp mạng
Xác nhận card mạng đang có link:
ethtool eth0
Tìm:
Link detected: yes
Nếu không có link, kiểm tra cáp, switch, modem hoặc ONT.
Kiểm tra interface
ip link show eth0
Interface phải ở trạng thái hoạt động.
Có thể kích hoạt:
ip link set eth0 up
Kiểm tra modem hoặc ONT
Nếu thiết bị nhà mạng đang chạy router mode, máy chủ có thể không thể quay PPPoE trực tiếp.
Trong mô hình này, modem hoặc ONT thường cần được cấu hình Bridge nếu muốn CentOS trực tiếp thực hiện PPPoE.
Kiểm tra username và password
Sai tài khoản PPPoE sẽ khiến quá trình xác thực thất bại.
Kiểm tra lại thông tin do nhà mạng cung cấp.
Kiểm tra log PPP
Có thể xem log hệ thống:
tail -f /var/log/messages
Hoặc lọc thông tin liên quan đến PPP:
grep -i ppp /var/log/messages
Các log này thường giúp xác định lỗi nằm ở quá trình Discovery, Authentication hay thiết lập IP.
Lỗi PPPoE Authentication Failed
Nếu log cho thấy lỗi xác thực, nguyên nhân phổ biến là:
- Sai username.
- Sai password.
- Nhà mạng giới hạn số phiên PPPoE.
- Tài khoản đang được sử dụng ở thiết bị khác.
- Nhà mạng yêu cầu thông số xác thực đặc biệt.
- Modem hoặc ONT chưa chuyển sang Bridge.
- Kết nối vật lý chưa đi đúng VLAN hoặc interface.
Nên kiểm tra từng thành phần thay vì thay đổi nhiều thông số cùng lúc.
PPPoE kết nối được nhưng không truy cập Internet
Nếu ppp0 đã có IP nhưng không thể truy cập Internet, kiểm tra route:
ip route
Kiểm tra:
ip route get 8.8.8.8
Lệnh này cho biết traffic đến địa chỉ đích đang đi qua interface nào.
Nếu route chính xác, kiểm tra:
ping -c 4 8.8.8.8
Nếu ping IP thành công nhưng domain không hoạt động, tập trung kiểm tra DNS.
Trường hợp CentOS 7 làm router PPPoE
Nếu CentOS 7 quay PPPoE và cung cấp Internet cho mạng LAN, cần bật IP forwarding.
Chỉnh sửa:
vi /etc/sysctl.conf
Thêm:
net.ipv4.ip_forward = 1
Áp dụng:
sysctl -p
Kiểm tra:
sysctl net.ipv4.ip_forward
Kết quả cần là:
net.ipv4.ip_forward = 1
Sau đó cần cấu hình NAT để các máy trong LAN sử dụng địa chỉ PPPoE để truy cập Internet.
Ví dụ với iptables:
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Đồng thời cần xây dựng firewall phù hợp với topology thực tế thay vì chỉ sử dụng duy nhất rule NAT.
Khi nào nên sử dụng PPPoE trực tiếp trên server?
Quay PPPoE trực tiếp trên Linux phù hợp trong một số trường hợp:
- Server đóng vai trò router.
- Server làm gateway Internet.
- Lab hoặc môi trường thử nghiệm mạng.
- Máy chủ cần nhận IP trực tiếp từ phiên PPPoE.
- Muốn loại bỏ router trung gian.
- Cần kiểm soát routing và firewall trực tiếp trên Linux.
Tuy nhiên, trong hệ thống production, cần cân nhắc việc đặt firewall hoặc router chuyên dụng phía trước server nếu hệ thống yêu cầu độ ổn định và bảo mật cao.
PPPoE trên CentOS 7 có phù hợp với server production?
Có thể sử dụng, nhưng cần đánh giá kiến trúc tổng thể.
CentOS 7 đã hết vòng đời hỗ trợ nên không nên triển khai hệ thống mới dựa trên CentOS 7 nếu không có yêu cầu đặc biệt.
Nếu cần triển khai Linux PPPoE mới, nên cân nhắc các hệ điều hành hiện đại hơn như Rocky Linux, AlmaLinux hoặc các bản phân phối Linux được hỗ trợ lâu dài.
Ngoài ra, PPPoE có giới hạn về MTU. Trong nhiều hệ thống, MTU PPPoE thường là 1492 byte do PPPoE sử dụng thêm phần header.
Có thể kiểm tra MTU:
ip link show ppp0
Nếu gặp tình trạng một số website hoặc dịch vụ kết nối không ổn định, cần kiểm tra MTU, MSS và cơ chế fragmentation trên toàn bộ đường truyền.
Một số lệnh quản trị PPPoE quan trọng
Kiểm tra interface:
ip address show
Kiểm tra route:
ip route
Khởi động PPPoE:
ifup ppp0
Ngắt PPPoE:
ifdown ppp0
Kiểm tra trạng thái:
pppoe-status /etc/sysconfig/network-scripts/ifcfg-ppp0
Kiểm tra package:
rpm -qa | grep rp-pppoe
Xem log:
grep -i ppp /var/log/messages
Theo dõi log trực tiếp:
tail -f /var/log/messages
Kiểm tra IP PPPoE:
ip -4 addr show ppp0
Kiểm tra đường đi:
ip route get 8.8.8.8
Kiểm tra Internet:
ping -c 4 8.8.8.8
Kiểm tra DNS:
ping -c 4 google.com
Checklist cấu hình PPPoE trên CentOS 7
Trước khi triển khai, có thể kiểm tra theo checklist sau:
- Xác định card mạng kết nối đến modem hoặc ONT.
- Kiểm tra trạng thái link Ethernet.
- Kiểm tra modem hoặc ONT đã Bridge nếu cần quay PPPoE trực tiếp.
- Chuẩn bị username PPPoE.
- Chuẩn bị password PPPoE.
- Cài đặt
rp-pppoe. - Chạy
pppoe-setup. - Chọn đúng interface WAN.
- Cấu hình DNS.
- Thiết lập kết nối liên tục nếu cần.
- Cấu hình tự động kết nối khi boot.
- Kiểm tra file
ifcfg-ppp0. - Khởi động
ppp0. - Kiểm tra địa chỉ IP.
- Kiểm tra default route.
- Kiểm tra DNS.
- Kiểm tra khả năng reconnect.
- Nếu làm router, bật IP forwarding.
- Cấu hình NAT.
- Xây dựng firewall phù hợp.
- Kiểm tra MTU và MSS nếu phát sinh lỗi kết nối.
Kết luận
Cấu hình PPPoE trên Linux CentOS 7 không quá phức tạp nếu hệ thống đã được chuẩn bị đúng về phần cứng và đường truyền. Công cụ rp-pppoe cung cấp pppoe-setup, giúp tạo nhanh cấu hình username, password, interface mạng, DNS và chế độ tự động kết nối.
Sau khi cấu hình, có thể sử dụng ifup ppp0, pppoe-status và các lệnh ip để kiểm tra trạng thái kết nối, địa chỉ IP và routing.
Nếu CentOS 7 đóng vai trò router cho mạng LAN, cần cấu hình thêm IP forwarding, NAT và firewall. Đối với môi trường production, nên đặc biệt chú ý đến bảo mật, khả năng tự động reconnect, MTU PPPoE và việc giám sát đường truyền.
Do CentOS 7 đã hết vòng đời hỗ trợ, việc sử dụng nền tảng này cho hệ thống mới không được khuyến nghị. Với các hệ thống triển khai mới, nên lựa chọn một bản Linux server hiện đại có thời gian hỗ trợ dài hơn để đảm bảo an toàn và thuận tiện cho quá trình vận hành lâu dài.
Tham khảo thêm PPPOE https://www.juniper.net/documentation/us/en/software/junos/interfaces-security-devices/topics/topic-map/security-interface-config-pppoe.html
中文 (中国)
English
