凌峰创科服务平台

Linux如何快速搭建PPPoE服务器?

本教程将以 RHEL/CentOS 7/8/9Ubuntu/Debian 为例,使用 ppppppoe 这两个核心软件包来搭建,整个过程分为以下几个步骤:

Linux如何快速搭建PPPoE服务器?-图1
(图片来源网络,侵删)
  1. 环境准备
  2. 安装必要的软件
  3. 配置 PPPoE 服务器
  4. 配置 PPPoE 客户端(用于测试)
  5. 启动服务与测试
  6. 高级配置(可选,如分配静态IP)

环境准备

在开始之前,请确保你的服务器满足以下条件:

  • 操作系统: 一台安装好的 Linux 服务器(本教程以 CentOS 7 和 Ubuntu 20.04 为例)。
  • 网络接口: 服务器需要有一个连接到局域网的网卡(eth0ens33),这个网卡将作为 PPPoE 客户端连接的入口。
  • IP 地址: 该网卡需要有一个静态的 IP 地址,这个 IP 地址将成为 PPPoE 服务器的“网关”地址。
    • 168.100.1/24
  • 客户端: 另一台电脑(Windows 或 Linux),用于作为 PPPoE 客户端进行连接测试。

安装必要的软件

对于 RHEL/CentOS 7/8/9

使用 yumdnf 包管理器安装 ppprp-pppoe

# CentOS 7
sudo yum install ppp rp-pppoe
# CentOS 8/9
sudo dnf install ppp rp-pppoe

对于 Ubuntu/Debian

使用 apt 包管理器安装 ppppppoe

sudo apt update
sudo apt install pppoe ppp

配置 PPPoE 服务器

这是最核心的步骤,主要配置文件是 /etc/ppp/pppoe-server-options

Linux如何快速搭建PPPoE服务器?-图2
(图片来源网络,侵删)

1 创建主配置文件

我们需要创建或编辑 PPPoE 服务器的配置文件,这个文件定义了服务器提供给客户端的各种选项。

sudo nano /etc/ppp/pppoe-server-options

粘贴到文件中,我会逐行解释其含义:

# =================================================================
# PPPoE Server Configuration File
# =================================================================
# 1. 核心网络设置
# noipdefault: 不使用客户端提供的 IP 地址,而是由服务器分配。
# defaultroute: 客户端将把服务器的 IP 作为默认网关。
# replacedefaultroute: 如果客户端已有默认路由,则用 PPPoE 的路由替换它。
# noccp: 不使用压缩控制协议。
# noaccomp: 不接受地址和控制字段压缩。
# novj: 不使用 Van Jacobson 头部压缩。
# nobsdcomp: 不使用 BSD 压缩。
# nodeflate: 不使用 DEFLATE 压缩。
# novjccomp: 不使用 Van Jacobson 头部压缩的校验。
# mtu 1492: PPPoE 协议本身有 8 字节的开销,以太网 MTU 1500 - 8 = 1492。
# mru 1492: 同上,设置最大接收单元。
lcp-echo-interval 10
lcp-echo-failure 3
# 2. IP 地址分配池
# 我们定义一个地址池,用于给客户端分配 IP 地址。
# local 192.168.100.1: 指定服务器的 IP 地址。
# remote 192.168.100.100-192.168.100.200: 定义客户端的 IP 地址池。
local 192.168.100.1
remote 192.168.100.100-192.168.100.200
# 3. 认证方式
# usepeerdns: 客户端使用服务器提供的 DNS 服务器地址。
# require-chap: 要求使用 CHAP 认证协议(比 PAP 更安全)。
# name pppoe-server: 设置服务器的名称,用于 CHAP 认证。
# logfile /var/log/pppoe.log: (可选) 设置日志文件。
usepeerdns
require-chap
name pppoe-server
# 4. 日志记录
# 将所有连接和认证信息记录到系统日志中。
# 在 systemd 系统中,这些日志可以通过 'journalctl -u pppoe-server' 查看。
logfile /var/log/pppoe.log

关键配置解释:

  • local: 必须设置,填写你服务器网卡的静态 IP 地址。
  • remote: 必须设置,定义 PPPoE 客户端可以获取的 IP 地址范围。
  • name: 定义服务器的 CHAP 名称,客户端需要知道这个名称才能完成认证。
  • require-chap: 强制使用 CHAP 认证,这是最安全的配置,我们将在下一步创建对应的用户名和密码。

2 创建 CHAP 认证文件

CHAP 认证需要服务器存储客户端的用户名和密码,文件路径为 /etc/ppp/chap-secrets

Linux如何快速搭建PPPoE服务器?-图3
(图片来源网络,侵删)
sudo nano /etc/ppp/chap-secrets

文件格式为:客户端名 服务器名 密码 IP地址或*

# Secrets for authentication using CHAP
# client  server  secret                  IP addresses
testuser1 pppoe-server mypassword1        *
testuser2 pppoe-server anotherpassword   *
  • testuser1: 客户端拨号时使用的用户名。
  • pppoe-server: 必须与 /etc/ppp/pppoe-server-options 文件中的 name 设置完全一致。
  • mypassword1: 对应的密码。
  • 表示该用户可以从 remote 定义的地址池中获取任意一个 IP 地址,如果想给用户分配固定 IP,可以写成 168.100.101

3 配置内核 IP 转发(非常重要!)

为了让 PPPoE 客户端能够通过服务器访问外部网络,服务器必须开启 IP 转发功能。

编辑 /etc/sysctl.conf 文件:

sudo nano /etc/sysctl.conf

找到或添加下面这一行:

net.ipv4.ip_forward = 1

然后使配置立即生效:

sudo sysctl -p

4 配置 NAT (网络地址转换)

为了让 PPPoE 客户端能上网,你需要将客户端的私有 IP 网络流量通过服务器的公网网卡进行 NAT 转换。

假设:

  • PPPoE 客户端网段:ppp (虚拟接口)
  • 服务器连接外网的网卡:eth0 (假设它有公网 IP 或已连接到互联网)

使用 iptables 命令设置 NAT 规则:

# 1. 清空现有的 NAT 规则(可选,避免冲突)
sudo iptables -t nat -F
# 2. 启用 MASQUERADE(伪装),将 ppp 网段的流量伪装成 eth0 的 IP
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 3. 允许 IP 转发
sudo iptables -A FORWARD -i ppp+ -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o ppp+ -m state --state RELATED,ESTABLISHED -j ACCEPT
# 4. 保存规则 (CentOS/RHEL 7+)
sudo service iptables save
# 或者 (CentOS/RHEL 8+)
sudo dnf install iptables-services
sudo systemctl enable iptables
sudo systemctl save iptables
# 5. 保存规则 (Ubuntu/Debian)
sudo apt install iptables-persistent
sudo netfilter-persistent save

配置 PPPoE 客户端(用于测试)

我们来配置另一台电脑作为客户端,连接刚刚搭建的服务器。

对于 Windows 客户端

  1. 打开 "网络和 Internet 设置" -> "网络和共享中心"。
  2. 点击 "更改适配器选项"。
  3. 右键点击你正在使用的网络连接(如 "以太网"),选择 "属性"。
  4. 在 "网络" 选项卡中,点击 "安装"。
  5. 选择 "协议",然后点击 "添加"。
  6. 选择 "PPPoE 协议",点击 "确定"。
  7. 勾选 "为此连接使用以下项目",输入:
    • ISP名称: 任意填写,"MyPPPoE"。
    • 用户名: testuser1 (你在服务器上创建的用户名)。
    • 密码: mypassword1 (对应的密码)。
  8. 点击 "连接"。

对于 Linux 客户端

可以使用 pppoeconf 命令(Debian/Ubuntu)或手动配置。

使用 pppoeconf (推荐,适用于 Debian/Ubuntu):

sudo pppoeconf

然后按照向导提示操作:

  1. 选择你的网卡(如 eth0)。
  2. 创建 PPP 连接,输入用户名 (testuser1) 和密码 (mypassword1)。
  3. 设置 "Use default routing" 和 "Don't use peer DNS" 等选项,通常保持默认即可。

启动服务与测试

1 启动 PPPoE 服务器

在服务器上,使用 pppoe-server 命令启动服务。

# 基本启动命令,指定服务器监听的网卡和配置文件
sudo pppoe-server -I eth0 -C pppoe-server -F -L /etc/ppp/pppoe-server-options
  • -I eth0: 指定监听的网络接口。请务必替换成你自己的网卡名
  • -C pppoe-server: 指定服务器的名称,必须与 chap-secrets 文件中的服务器名一致。
  • -F: 以后台守护进程模式运行。
  • -L: 指定配置文件的完整路径。

2 检查服务状态

  • 查看进程:
    ps aux | grep pppoe-server
  • 查看日志: 我们在配置中指定了日志文件。
    tail -f /var/log/pppoe.log

    当客户端连接时,你应该能看到类似 PPPoE connection from ... on interface ... 的日志。

3 验证客户端连接

  1. 在客户端电脑上发起 PPPoE 连接。
  2. 连接成功后,客户端应该获得一个 IP 地址(168.100.101)。
  3. 在客户端上 ping 服务器的 IP (168.100.1),应该能通。
  4. 在客户端上 ping 一个公网地址(如 8.8.8),如果服务器配置了 NAT 且能上网,也应该能通。

高级配置(可选)

分配静态 IP 给特定用户

如果你希望某个用户(adminuser)每次连接都获得固定的 IP 地址(168.100.110),只需修改 /etc/ppp/chap-secrets 文件:

adminuser  pppoe-server  adminpass  192.168.100.110

这样,当 adminuser 拨号时,服务器就会强制分配 168.100.110 这个 IP 地址给他。

设置开机自启

为了方便管理,可以创建一个 systemd 服务文件。

创建 /etc/systemd/system/pppoe-server.service

[Unit]
Description=PPPoE Server Daemon
After=network.target
[Service]
Type=forking
ExecStart=/usr/sbin/pppoe-server -I eth0 -C pppoe-server -F -L /etc/ppp/pppoe-server-options
ExecStop=/usr/bin/killall pppoe-server
Restart=on-failure
PIDFile=/var/run/pppoe-server.pid
[Install]
WantedBy=multi-user.target

然后启用并启动服务:

sudo systemctl daemon-reload
sudo systemctl enable pppoe-server
sudo systemctl start pppoe-server

你的 PPPoE 服务器就搭建完成了,并且会在服务器重启后自动启动。

分享:
扫描分享到社交APP
上一篇
下一篇