通过 PPPOE 将 linux 服务器作为本地局域网 IPv4 外网网关

将 linux 服务器作为本地外网网关,方便利用 Linux 生态中的各种网络工具,对流量进行自定义、精细化管理...

环境说明

bash 复制代码
拨号主机:CentOS 7.9, Linux Kernel 5.4.257
拨号软件: rp-pppoe-3.11-7.el7.x86_64

初始化

1、升级系统到新的稳定内核, lt 长期支持版本、ml 当前主线版本

bash 复制代码
# CentOS 7.9 默认 Kernel 为 3.10
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
# 载入 elrepo-kernel 元数据
yum --enablerepo=elrepo-kernel repolist
# 安装长期支持的内核版本
yum --enablerepo=elrepo-kernel install kernel-lt.x86_64  -y
# 查看内核启动顺序
awk -F \' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
# 设置默认开机从新内核启动
grub2-set-default 0

2、install 拨号软件

bash 复制代码
yum install rp-pppoe-3.11-7.el7.x86_64 -y

拨号设置

1、执行 pppoe-setup 初始化拨号设置,如下图所示


## PPPOE 拨号

1、开始拨号 ifup ppp0 ,断开拨号 ifdown ppp0

bash 复制代码
pppoe-start  /etc/sysconfig/network-scripts/ifcfg-ppp0

pppoe-stop      # 停止拨号
pppoe-status    # 查看状态

2、查看拨号后的路由表信息、及接口 ppp0 状态

bash 复制代码
# 拨号后会自动更新本机路由,默认将所有流量通过本地接口 ppp0 发出,且该出口的下一跳 ip 地址为 100.78.128.1
route -n
#> Kernel IP routing table
#> Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
#> 0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 ppp0
#> 100.78.128.1    0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
#> 192.168.21.0    0.0.0.0         255.255.255.0   U     101    0        0 ens9
#> 192.168.31.0    0.0.0.0         255.255.255.0   U     100    0        0 eth0

ifconfig ppp0
#> ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1492
#>         inet 100.78.185.33  netmask 255.255.255.255  destination 100.78.128.1
#>         ppp  txqueuelen 3  (Point-to-Point Protocol)
#>         RX packets 13973  bytes 16487388 (15.7 MiB)
#>         RX errors 0  dropped 0  overruns 0  frame 0
#>         TX packets 7520  bytes 1150614 (1.0 MiB)
#>         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

配置 SNAT

1、配置拨号主机作为外网网关

bash 复制代码
# 启用转发
sysctl -w net.ipv4.conf.all.forwarding=1

# 允许网段 192.168.31.0/24 的终端通过拨号主机转发
iptables -I FORWARD -t filter -s 192.168.31.0/24 -j ACCEPT

# 将数据包源地址转换为接口 ppp0 的 ip 地址(SNAT, 共享 ip 上网)
iptables -A POSTROUTING -t nat -s 192.168.31.0/24 -o ppp0 -j MASQUERADE

# 查看 snat 规则
iptables -nvL POSTROUTING -t nat |grep ppp0
#> pkts bytes target     prot opt in     out     source               destination
#> 800 78869 MASQUERADE  all  --  *      ppp0    192.168.31.0/24      0.0.0.0/0

2、查看连接信息,测试主机 31.218 通过本机访问外网

bash 复制代码
yum install conntrack-tools -y

conntrack -L |grep -i 31.218 |grep -i estab
conntrack v1.4.4 (conntrack-tools): 53 flow entries have been shown.
tcp      6 431988 ESTABLISHED src=192.168.31.218 dst=58.63.233.98 sport=50104 dport=443 src=58.63.233.98 dst=100.78.185.33 sport=443 dport=50104 [ASSURED] mark=0 secctx=system_u:object_r:unlabeled_t:s0 use=1

码字不易,若觉得本文对你有用,欢迎 点赞 👍、分享 🚀 ,相关技术热点时时看🔥🔥🔥​​​...

相关推荐
A.A呐14 分钟前
【Linux第十三章】缓冲区
linux·服务器
Blurpath住宅代理17 分钟前
代理IP全面解析:从协议原理到高阶应用场景的技术指南
网络·静态ip·动态代理·住宅ip·住宅代理
想唱rap1 小时前
Linux线程
java·linux·运维·服务器·开发语言·mysql
JFSJFX1 小时前
手机短信误删怎么办?这4种恢复办法亲测有效,轻松找回短信
运维·服务器
yuzhuanhei1 小时前
docker常用命令
运维·docker·容器
無名路人1 小时前
Zsh 脚本 + VS Code 任务:NestJS + Vue3 一键部署到 1Panel
运维·后端·自动化运维
anarckk1 小时前
docker volume 导入导出命令
运维·docker·容器
cccccc语言我来了1 小时前
Linux(9)操作系统
android·java·linux
Lueeee.1 小时前
Linux驱动中为什么既有 sysfs,又有字符设备?以 DHT11 驱动为例彻底讲透
linux·驱动开发
晏宁科技YaningAI1 小时前
全球短信路由系统设计逻辑打破 80%送达率瓶颈:工程实践拆解
网络·网络协议·架构·gateway·信息与通信·paas