CentOS 8服务器搭建L2TP服务器(over IPsec)操作指南

news2024/11/27 13:38:01

07baf16fcf5dd7610bf26ca32718842b.gif

正文共:1234 字 14 图,预估阅读时间:2 分钟

之前发过把我自己的服务器搬上公网的文章我用100块钱把物理服务器放到了公网,省了几万块!,当时L2TP拨号用的是网络上的解决方案,也就是现成的脚本,一跑就OK了。像这样:

bb823d4ab2760aa4e88fe23c15bae5ba.png

输入几个关键信息,脚本就自动执行完成了。我看了一下,脚本一共810行,功能很强大,系统方面支持CentOS 6+、Debian 7+、Ubuntu 12+。

9da0f210685ab0599fbb7b58e54224cd.png

但实际上有个隐藏的问题。上次部署时用的是CentOS 7的系统,一切正常。腾讯云的云主机重新部署之后仅支持CentOS 8.3的镜像了,导致安装频繁报错。

49732a725921cde97f567bf3e7318803.png

查看脚本内容发现,此脚本仅支持CentOS的6和7两个版本,在8上,因为软件名称和操作命令变更,无法正常安装。

既然这样,那就只能拆解代码,自己安装了。

首先找到脚本中需要的软件,或者找到执行脚本时不能正常使用的命令,用yum provides来查找命令,最后整理一下,需要安装以下软件:

yum install -y make gcc gmp-devel xmlto bison flex libpcap lsof vim man xl2tpd libreswan

修改ipsec配置文件,和strongSwan的配置很相似strongSwan之ipsec.conf配置手册

vim /etc/ipsec.conf

在config setup中添加以下命令,允许传透nat建立l2tp连接。

nat_traversal=yes

05f8364f62b24ba367c3d9b034068a09.png

上图中最后一行可以看到include /etc/ipsec.d/*.conf这行代码,所以需要在/etc/ipsec.d/目录下创建IPsec与L2TP服务关联的配置文件。

vim /etc/ipsec.d/l2tp_psk.conf

文件复制以下内容,仅需修改left参数为公网网卡的IP地址。

conn L2TP-PSK-NAT
rightsubnet=vhost:%priv
also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
authby=secret
pfs=no
auto=add
keyingtries=3
dpddelay=30
dpdtimeout=120
dpdaction=clear
rekey=no
ikelifetime=8h
keylife=1h
type=transport
left=10.0.8.12
leftprotoport=17/1701
right=%any
rightprotoport=17/%any

e5887f5a9764c7e6da734e3442c41324.png

在/etc/ipsec.d/目录下创建保存预共享密钥的文件,名字可自定义,扩展名为.secrets。和strongSwan的配置也很相似strongSwan之ipsec.secrets配置手册

vim /etc/ipsec.d/ipsec.secrets

预共享密钥参照如下格式填写,其中,IP地址为网卡的IP地址,双引号中为预共享密钥,请自行设置。(注意字段之间用空格或者tab隔开,否则检查会报错)

10.0.8.12   %any:   PSK   "test123"

修改sysctl的内核支持文件。

vim /etc/sysctl.conf

可以直接用下面的内容替换掉原来的文件。

vm.swappiness = 0
net.ipv4.ip_forward = 1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.all.promote_secondaries = 1
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.default.promote_secondaries = 1
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.lo.arp_announce=2
net.ipv4.neigh.default.gc_thresh3 = 4096
net.ipv6.neigh.default.gc_thresh3 = 4096
net.ipv4.neigh.default.gc_stale_time=120
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syncookies = 1
net.ipv6.conf.all.disable_ipv6=0
net.ipv6.conf.default.disable_ipv6=0
net.ipv6.conf.lo.disable_ipv6=0
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.printk = 5
kernel.shmmax = 68719476736
kernel.softlockup_panic = 1
kernel.sysrq = 1

修改完保存退出,执行以下命令重新加载配置文件使配置生效。

sysctl -p

重启IPsec服务,并检验ipsec服务配置。

systemctl restart ipsec
ipsec verify

ecbc9cb93ecd9a454b2d623d6dd0fcea.png

就是图里面/proc/sys/net/ipv4/conf/eth0/rp_filter这个文件很奇怪,使用vim无法编辑,修改权限也不行,但是可以用echo。那就用echo命令把里面的1换成0吧。

echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter

修改L2TP配置文件,设置监听网卡地址和LNS的IP地址及分配的地址段。

vim /etc/xl2tpd/xl2tpd.conf

主要修改4个地方配置:

1、[global]模块中,取消listen-addr注释,并修改IP地址为网卡地址(10.0.8.12);

2、[global]模块中,取消ipsec saref = yes的注释;

3、[lns default]模块中,在ip_range后设置客户端连接服务器后LNS分配给客户端的ip地址范围;

4、[lns default]模块中,将local ip设置为LNS的网关IP地址。

如下图:

67d31094605ba4275bad0dfb8e597aad.png

修改xl2tpd配置文件中的安全配置。

vim /etc/ppp/options.xl2tpd

文本中增加验证字段的算法要求,DNS视具体情况进行调整。

require-mschap-v2

35739a8caa7e77717564cae0c90a41b6.png

将L2TP服务器的账户与密码写入/etc/ppp/chap-secrets文件。

vim /etc/ppp/chap-secrets

依次写用户名、服务名、密码、IP地址,实际上服务名与IP地址都写成星号即可,主要设置用户名与密码,以空格或tab隔开。填写服务名用于多服务场景,填写IP地址用于指定该用户登录后获取的IP地址为某个固定地址。

c8a45d705fad69f2e4a3b306a8606f9c.png

然后就是防火墙的规则调整了,首先停止firewalld服务并禁用。

systemctl stop firewalld
systemctl mask firewalld

安装iptables服务。

yum install -y iptables iptables-services

清空iptables规则。

iptables -P INPUT ACCEPT
iptables -F
iptables -X
iptables -Z

执行命令进行规则配置,其中转发相关的地址段请设置与L2TP地址段一致。

iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -I FORWARD -s 172.16.113.0/24 -j ACCEPT
iptables -I FORWARD -d 172.16.113.0/24 -j ACCEPT
iptables -A INPUT -p udp -m policy --dir in --pol ipsec -m udp --dport 1701 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 1701 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 4500 -j ACCEPT
iptables -A INPUT -p esp -j ACCEPT
iptables -A INPUT -m policy --dir in --pol ipsec -j ACCEPT
iptables -A FORWARD -i ppp+ -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

上述命令执行完后,保存iptables规则并重启服务。

service iptables save
systemctl restart iptables

走完上面的流程,现在就需要检查iptables、ipsec、xl2tpd三个服务是否是正常运行了。

systemctl status iptables
systemctl status ipsec

f8cb01456fe759139830b104d2d3c662.png

systemctl status xl2tpd

3e5d6b468f151b6587034c040354c10d.png

这个地方出了两次错误,第一次启动失败是内核重新挂载l2tp_ppp失败,需要修改/usr/lib/systemd/system/xl2tpd.service配置文件,注释掉相关配置。

ExecStartPre=/sbin/modprobe -q l2tp_ppp

d067d54242ee17c039e9a96862b0ce97.png

然后执行以下命令重启服务。

systenctl daemon-reload
systemctl restart xl2tpd

第二个报错就相对简单,但是不好找,我把LNS的本地地址配错了,一直提示地址绑定失败。所以操作的时候还是要细心。

5de19b5e644f8f8ebe74718a2d77c421.png

最后再看一下连接成功的页面。

1b9ae5f8ad1a53eef5dbc89d587e328e.png

得益于高链路质量,延迟只有5ms左右。

后台回复“l2tp”获取自动化部署脚本。

caaf90d9963d65f883c41dd6229262e9.gif

长按二维码
关注我们吧

f343927a346aac4f34de31e5bd12f5bb.jpeg

02dccecf281f805fb1ce530a2986f8b0.png

79.55 Gbps!已经初步测得VMWare ESXi 6.7的vSwitch转发性能

Debian阵营还是要原装,Ubuntu是真不行

还得是华为,OpenEuler打流能到37 Gbps

羡慕!大佬的VPP能达到180G性能,而我的却只有13.5G

iperf命令简介

iperf3命令简介

听说你想收集HCL的设备版本?好吧,成全你!

还在到处找Win11镜像?自己动手,丰衣足食!

用WireShark抓包解决StrongSwan和H3C对接失败的问题

VMware vCenter Server 7.0快速部署操作指南

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1590582.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL 修改数据

目录 数据插入-insert 不指定列名插入: 插入整行数据 格式: 多行数据插入 格式: 指定列名插入 插入1行 插入多行 更新字段-update 语法: 删除表 语法: 案例: 数据插入-insert INSERT 将数据行…

c++命令行解析开源库cxxopts上手教程

文章目录 cxxopts快速入门1. cmake环境配置2. 定义解析的规则3. 使用例子 cxxopts 简介 cxxopts是一个轻量级的C命令行解析库,它提供了易于使用的API来定义和解析命令行选项。它支持多种类型的选项,并且允许用户自定义选项的处理逻辑。 项目地址&#x…

Unity中支持泰语--没有版权限制

在Unity中支持泰语主要涉及以下几个方面: 选择合适的字体:在Unity中,确保使用支持泰文字符的字体是至关重要的。例如,可以选择使用Noto Serif Thai字体,这是一个支持泰语的字体2。 处理Unity版本问题:某些…

【C++之queue的应用及模拟实现】

C学习笔记---014 C之queue的应用及模拟实现1、queue的简单介绍2、queue的简单接口应用3、queue的模拟实现3.1、queue的结构一般的构建3.2、queue的适配器模式构建3.3、queue的主要接口函数 4、queue的模拟实现完整代码4.1、一般方式4.2、泛型模式 5、queue巩固练习题5.1、最小栈…

软件开发安全备受重视,浙江某运营商引入CWASP认证课程,

​浙江省某大型运营商是一家实力雄厚、服务优质的通信运营商,致力于为全省用户提供优质、高效的通信服务。数字时代,该运营商顺应信息能量融合发展趋势,系统打造以5G、算力网络、能力中台为重点的新型信息基础设施,夯实产业转型升…

VUE_H5页面跳转第三方地图导航,兼容微信浏览器

当前项目是uniapp项目,若不是需要替换uni.showActionSheet选择api onMap(address , organName , longitude 0, latitude 0){var ua navigator.userAgent.toLowerCase();var isWeixin ua.indexOf(micromessenger) ! -1;if(isWeixin) {const mapUrl_tx "…

nacos服务器挂了之后springboot/springcloud服务会挂吗?不会挂(顺便深入源码分析nacos配置中心客户端核心功能实现)

文章目录 nacos挂了之后服务会挂吗?不会挂(深入源码分析)展开nacos客户端源码找本地缓存配置相关文件客户端内存缓存客户端健康状态获取配置的实现 nacos挂了之后服务会挂吗?不会挂(深入源码分析) 展开nac…

MATLAB 浮点数 转化为 定点数

a fi(v,s,w,f) 一个 fi 对象,其值为 v,符号性为 s,字长为 w,小数长度为 f。 AD9361 a fi(0.707,1,12,11)

GPT建模与预测实战

代码链接见文末 效果图: 1.数据样本生成方法 训练配置参数: --epochs 40 --batch_size 8 --device 0 --train_path data/train.pkl 其中train.pkl是处理后的文件 因此,我们首先需要执行preprocess.py进行预处理操作,配置参数…

一个开源跨平台嵌入式USB设备协议:TinyUSB

概述 TinyUSB 是一个用于嵌入式系统的开源跨平台 USB 主机/设备堆栈,设计为内存安全,无需动态分配,线程安全,所有中断事件都被推迟,然后在非 ISR 任务函数中处理。查看在线文档以获取更多详细信息。 源码链接&#xff…

【U8+】打开固定资产卡片提示:运行时错误‘91’,未设置对象变量或with block变量。

【问题描述】 用友U8软件,固定资产模中打开某张卡片后, 提示:运行时错误‘91’,未设置对象变量或with block变量。 Ps:但不是所有卡片打开的时候都会提示,有的正常。 【解决方法】 跟踪数据库后&#xff…

基于单片机的智能模拟路灯控制系统

摘 要: 随着电力资源的紧缺,以及光污染和雾霾天气的影响,更智能化的路灯设计对人们的日常生活意义重大。本文的智能路灯控制系统是基于单片机的控制器,通过介绍该系统相应的硬件设计和软件设计,实现定时开关和依具体情况是否需要来开关路灯和进行亮度调节,并且具有自检功能…

Ubuntu 20.04 设置开启 root 远程登录连接

Ubuntu默认不设置 root 帐户和密码 Ubuntu默认不设置 root 帐户和密码 Ubuntu默认不设置 root 帐户和密码 如有需要,可在设置中开启允许 root 用户登录。具体操作步骤如下: 操作步骤 1、首先使用普通用户登录 2、设置root密码 macw:~$ sudo passwd …

Redis入门到通关之Redis通用命令

文章目录 Redis数据结构介绍Redis 通用命令命令演示KEYSDELEXISTSEXPIRE RedisTemplate 中的通用命令 Redis数据结构介绍 Redis 是一个key-value的数据库,key一般是String类型,不过value的类型多种多样: 贴心小建议:命令不要死…

Python编写一个抽奖小程序,新手入门案例,简单易上手!

“ 本篇文章将以简明易懂的方式引导小白通过Python编写一个简单的抽奖小程序,无需太多的编程经验。通过本文,将学习如何使用Python内置的随机模块实现随机抽奖,以及如何利用列表等基本数据结构来管理和操作参与抽奖的人员名单。无论你是Pytho…

时间序列分析 #ARMA模型的识别与参数估计 #R语言

掌握ARMA模型的识别和参数估计。 原始数据在文末!!! 练习1、 根据某1915-2004年澳大利亚每年与枪支有关的凶杀案死亡率(每10万人)数据(题目1数据.txt),求: 第1小题&…

计算机视觉——DiffYOLO 改进YOLO与扩散模型的抗噪声目标检测

概述 物体检测技术在图像处理和计算机视觉中发挥着重要作用。其中,YOLO 系列等型号因其高性能和高效率而备受关注。然而,在现实生活中,并非所有数据都是高质量的。在低质量数据集中,更难准确检测物体。为了解决这个问题&#xff…

Python实现PDF页面的删除与添加

在处理PDF文档的过程中,我们时常会需要对PDF文档中的页面进行编辑操作的情况,如插入和删除页面。通过添加和删除PDF页面,我们可以增加内容或对不需要的内容进行删除,使文档内容更符合需求。而通过Python实现PDF文档中的插入和删除…

SSL数字证书

SSL数字证书产品提供商主要来自于国外,尤其是美国,原理和使用操作系统一样,区别在于SSL数字证书目前无法替代性,要想达到兼容性99%的机构目前全球才3-4家,目前国内的主流网站主要使用的是国际证书,除了考虑…

深度学习在三维点云处理与三维重建中的应用探索

目录 点云数据处理 数据清洗 数据降噪和简化 数据配准 特征提取 数据增强 数据组织 性能考量 PointNet PointNet 算法问题 改进方法 三维重建 重建算法 架构模块 流程步骤 标记说明 优点和挑战 点云数据处理 数据清洗 去噪:点云数据通常包含噪声…