目录
步骤 7:启用Linux系统的IP包转发功能 并设置转发策略
当配置PPTP(Point-to-Point Tunneling Protocol)服务器时,首先要确保你的服务器上已经安装了PPTP服务器软件。通常,在CentOS上使用pptpd
(PoPToP Point to Point Tunneling Server)软件包来配置PPTP服务器。以下是如何配置PPTP服务器的详细步骤:
步骤 1:安装PPTP服务器软件
这里我们首先安装了 EPEL 仓库,因为 pptpd
可能在 EPEL 仓库中
yum -y install epel-release
安装pptpd
软件包。如果尚未安装,可以使用以下命令安装:
yum -y install pptpd
安装 iptables-services
包,并使用它来管理 iptables
规则
yum -y install iptables-services
步骤 2:启动PPTP服务器
1.启动服务:安装完成后,启动 pptpd
服务:
systemctl start pptpd
2.自动启动:如果你想在系统启动时自动启动 pptpd
服务,可以使用以下命令:
systemctl enable pptpd
3.确认服务状态:你可以使用以下命令来检查 pptpd
服务的状态:
systemctl status pptpd
结果如图所示:
步骤 3:防火墙配置
配置防火墙:如果你的系统运行了防火墙,确保 PPTP 和 GRE 协议的端口都已打开,并且允许相关区域的流量放行,以下是相关的 firewalld
命令:
firewall-cmd --permanent --add-port=1723/tcp
firewall-cmd --permanent --add-protocol=gre
firewall-cmd --zone=public --add-service=dns --permanent
firewall-cmd --reload
查看当前默认区域
firewall-cmd --get-default-zone
放行当前区域流量
firewall-cmd --zone=<区域名称> --add-rich-rule='rule family="ipv4" source address=0.0.0.0/0 accept'
永久放行,后面加--permanent
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address=0.0.0.0/0 accept' --permanent
第二种方法,如果设置默认区域为 "trusted",这将允许所有入站和出站流量
firewall-cmd --set-default-zone=trusted
firewall-cmd --reload
注意:不能关闭防火墙,因为要后面依靠防火墙的策略进行流量转发
步骤 4:编辑PPTP配置文件
打开 /etc/pptpd.conf
文件并设置PPTP服务器的本地IP地址和要分配给客户端的IP地址范围。
使用vi文本编辑器打开 /etc/pptpd.conf
文件
vi /etc/pptpd.conf
添加以下字段,设置PPTP服务器的本地IP地址和要分配给客户端的IP地址范围。
option /etc/ppp/options.pptpd
localip <PPTP服务器的IP地址>
remoteip <分配给客户端的IP地址范围>
注意:
option /etc/ppp/options.pptpd
:
- 这一行告诉PPTP服务器使用指定的选项文件
/etc/ppp/options.pptpd
来配置PPTP连接。选项文件包含了有关连接的各种配置设置,例如认证方式、加密方式、DNS服务器等。
localip <PPTP服务器的IP地址>
:
- 这个选项指定了PPTP服务器在VPN连接中使用的本地IP地址。它不是公网IP地址,而是服务器在VPN通信中使用的内部IP地址。这个IP地址通常用于在服务器和VPN客户端之间建立隧道,不会直接暴露给公网。
remoteip <分配给客户端的IP地址范围>
:
- 这个选项指定了PPTP服务器用于分配给VPN客户端的IP地址范围。这些IP地址是在VPN连接期间分配给客户端的,以便它们能够在VPN隧道中通信。这些IP地址也是内部IP地址,不是公网IP地址。
例如:
步骤 5:编辑PPTP选项文件
PPTP选项文件通常位于/etc/ppp/options.pptpd
。使用文本编辑器打开此文件:
vi /etc/ppp/options.pptpd
添加以下内容:
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
nologfd
ms-dns 114.114.114.114
proxyarp
defaultroute
lock
nobsdcomp
解释:
name pptpd
:设置PPTP服务器的名称。refuse-pap
、refuse-chap
、refuse-mschap
:拒绝使用不安全的认证方法。require-mschap-v2
:要求使用MS-CHAPv2认证。require-mppe-128
:要求使用128位MPPE加密。ms-dns
:设置DNS服务器的IP地址。proxyarp
:启用Proxy ARP以将流量路由到VPN客户端。defaultroute
:修改默认路由。lock
:锁定/var/lock/ppp
目录,确保PPTP客户端之间不会出现冲突。nobsdcomp
:禁用BSD压缩。
各别详细解释:
-
lock:
- 作用:这个选项会锁定
/var/lock/ppp
目录,这样在一个时间点只能有一个pppd
进程访问这个目录。这主要是为了防止多个pppd
进程同时运行并可能导致的冲突。 - 如果没有这个选项:可能会出现多个
pppd
进程尝试同时访问这个目录,这可能会导致不可预测的行为和潜在的冲突。
- 作用:这个选项会锁定
-
nobsdcomp:
- 作用:这个选项禁用 BSD 压缩。BSD 压缩是一个数据压缩协议,可以减少传输的数据量。
- 如果没有这个选项:如果两端(服务器和客户端)都支持 BSD 压缩,那么它可能会被使用。这可能会提高带宽利用率,但同时也会稍微增加 CPU 使用率(因为压缩和解压缩需要计算资源)。
-
proxyarp:
- 作用:这个选项启用 Proxy ARP。当启用时,服务器会回应在其局域网上对 VPN 客户端 IP 地址的 ARP 请求,就好像 VPN 客户端就在其局域网上一样。
- 如果没有这个选项:如果服务器没有为 VPN 客户端做 Proxy ARP,那么局域网上的其他设备可能无法与 VPN 客户端通信。
-
defaultroute:
- 作用:这个选项会修改系统的默认路由,使其指向 PPTP 连接。
- 如果没有这个选项:系统的默认路由不会被修改。这意味着,除非有其他特定的路由设置,否则所有的互联网流量都不会通过 PPTP 连接。
步骤 6:设置PPTP用户认证
PPTP用户的认证信息通常保存在/etc/ppp/chap-secrets
文件中。你可以编辑此文件并添加用户名、服务器、密码和IP地址的条目。
使用文本编辑器打开此文件:
vi /etc/ppp/chap-secrets
添加你的vpn租户名(client),密码(secret)以下是一个示例 :
# Secrets for authentication using CHAP
# client server secret IP addresses
user1 * password1 *
user2 * password2 *
确保为每个PPTP用户提供唯一的用户名和密码。
步骤 7:启用Linux系统的IP包转发功能 并设置转发策略
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
-
echo "net.ipv4.ip_forward = 1"
:这部分命令用于创建一个字符串,其中包含了要写入配置文件的内容。在这里,它设置了一个系统参数net.ipv4.ip_forward
的值为1
。这个参数控制了Linux系统的IP包转发功能。 -
>> /etc/sysctl.conf
:这部分命令用于将上述创建的字符串附加(追加)到配置文件/etc/sysctl.conf
的末尾。>>
运算符表示将内容追加到文件,而不是覆盖文件。
使用 sysctl -p
命令,重新加载sysctl配置以使其生效
sysctl -p
配置Linux服务器以支持PPTP VPN连接
modprobe ip_nat_pptp
iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -o ens192 -j MASQUERADE
/sbin/iptables -I FORWARD -p tcp --syn -i ppp+ -j TCPMSS --set-mss 1356
这三行命令通常用于配置Linux服务器以支持PPTP VPN连接,并确保数据正确地流经服务器。让我逐一解释这些命令以及它们的作用:
-
modprobe ip_nat_pptp
:这个命令用于加载ip_nat_pptp
内核模块,以支持PPTP的网络地址转换(NAT)。PPTP协议本身需要特殊的NAT处理来正确地转发PPTP通信中的控制和数据流量。因此,在配置PPTP服务器时,通常需要加载这个模块。 -
iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -o ens192 -j MASQUERADE
:这个命令用于配置iptables规则,将PPTP客户端的流量进行NAT转换(MASQUERADE)。它确保了从PPTP客户端发出的流量在离开服务器时具有正确的源IP地址,以便正确路由到公共网络。注意:ens192是我自己服务器的流量出口的网卡名字,具体的要以自己的服务器流量出口的网卡为准,也就是你服务器用哪个网卡上网的那张网卡的名字。 -
/sbin/iptables -I FORWARD -p tcp --syn -i ppp+ -j TCPMSS --set-mss 1356
:这个命令用于设置iptables规则,以处理PPTP VPN连接中的TCP数据包。它可以帮助解决PPTP连接中的MTU(最大传输单元)问题,以确保数据包正确地传递。设置MSS(最大段大小)为1356可以帮助避免由于PPTP封装引起的碎片问题。
对于 VPN 连接,您需要确保允许从 VPN 接口(例如 ppp+
)到外部接口(例如 ens192
)的流量,以及从外部接口到 VPN 接口的流量。这是确保 VPN 客户端的流量可以正确地路由到互联网并返回的关键。
iptables -A FORWARD -i ppp+ -o ens192 -j ACCEPT
iptables -A FORWARD -i ens192 -o ppp+ -j ACCEPT
iptables -A FORWARD -i ppp+ -o ens192 -j ACCEPT
-A FORWARD: 这告诉 iptables 我们要在 FORWARD 链的末尾添加一个新规则。
-i ppp+: 这是一个接口匹配条件,表示数据包的入口接口应该匹配 ppp+。这里的加号 (+) 是一个通配符,意味着这条规则适用于 ppp0、ppp1、ppp2 等所有以 ppp 开头的接口。
-o ens192: 这是另一个接口匹配条件,表示数据包的出口接口应为 ens192。
-j ACCEPT: 这定义了当前规则的目标动作。在这种情况下,当数据包满足上述条件时,它会被接受。
总的来说,这条命令的意思是:允许所有从任何 ppp 接口(例如 VPN 连接)进入并从 ens192 接口出去的数据包。
iptables -A FORWARD -i ens192 -o ppp+ -j ACCEPT
-A FORWARD: 同上,我们要在 FORWARD 链的末尾添加一个新规则。
-i ens192: 数据包的入口接口应为 ens192。
-o ppp+: 数据包的出口接口应该匹配 ppp+,表示所有以 ppp 开头的接口。
-j ACCEPT: 当数据包满足上述条件时,它会被接受。
总的来说,这条命令的意思是:允许所有从 ens192 接口进入并从任何 ppp 接口(例如 VPN 连接)出去的数据包。
在上下文中,这两条命令确保了 VPN 客户端的流量可以从 VPN 连接路由到互联网,并从互联网返回到 VPN 连接。
保存当前的 iptables
规则:
iptables-save > /etc/sysconfig/iptables
设置开机自启动iptables
systemctl enable iptables
如果没把规则保存到/etc/sysconfig/iptables,注意以下命令在系统重启之后需要重新输入:
iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -o ens192 -j MASQUERADE
/sbin/iptables -I FORWARD -p tcp --syn -i ppp+ -j TCPMSS --set-mss 1356
iptables -A FORWARD -i ppp+ -o ens192 -j ACCEPT
iptables -A FORWARD -i ens192 -o ppp+ -j ACCEPT
请确保有允许从 ppp 接口到 ens192 接口的流量的规则。
附:如何查看自己的网卡以及ip:
ip addr
步骤 8:重新启动PPTP服务
完成以上配置后,重新启动PPTP服务:
systemctl restart pptpd
步骤 9:检查PPTP服务状态
你可以使用以下命令检查PPTP服务的状态:
systemctl status pptpd
如果一切正常,你应该看到PPTP服务器处于活动状态,并且没有错误消息。
查看1723端口是否被监听,命令:
ss -ntlp
步骤 10:连接到PPTP服务器
使用PPTP VPN客户端从另一台计算机尝试连接到你的PPTP服务器。在连接时,使用你在/etc/ppp/chap-secrets
文件中设置的用户名和密码进行身份验证。
以下用window11系统的电脑为例:
打开设置-->网络和Internet-->VPN
点击添加VPN
VPN提供商选择Windows(内置),连接名称填一个你喜欢的名称,服务器名称或地址填你 PPTP服务器的ip地址,VPN类型选择PPTP,登录信息的类型选择用户和密码,然后在下面的可选项输入你的租户名和密码,点击保存
,
点击连接
完成。
通过按照以上步骤进行配置,你应该能够成功设置和运行PPTP服务器,允许远程用户连接并安全地访问你的网络。记得始终确保你的PPTP服务器和密码策略是安全的,以保护你的网络免受潜在的威胁。
附:
其他知识:
1.确保 FORWARD 链上的规则允许从 VPN 客户端到外部的流量。您可以使用以下命令查看 FORWARD 链的规则:
iptables -L FORWARD -v -n
-
iptables
: 这是命令本身,用于操作包过滤规则集。 -
-L FORWARD
:-L
参数用于列出指定链的规则。在这个例子中,正在列出FORWARD
链的规则。FORWARD
链用于处理不是直接发往本机、也不是直接从本机发出的数据包,即“转发”数据包。 -
-v
: 这是 "verbose"(详细)模式的开关。在详细模式下,iptables
会显示更多关于每条规则的信息,例如规则所匹配的数据包数量、数据包的总字节数等。 -
-n
: 此参数指示iptables
在输出中显示数字格式的 IP 地址和端口号,而不是尝试解析主机名、网络名或服务名。这使得输出更加快速(因为它避免了 DNS 查询)和明确。
请确保有允许从 ppp 接口到 ens192 接口的流量的规则。
-
从
iptables
FORWARD 链输出中,我可以看到以下信息: - 已经允许了与已建立或相关连接的所有流量(这对于通常的通信是必要的)。
- 允许了从和到
lo
(本地)接口的所有流量。 - 有一些与
firewalld
的区域和直接规则相关的链,这些链可能包含更具体的允许或拒绝规则。 - 丢弃了所有标记为 INVALID 的数据包。这是一个安全措施,以防止处理可能损坏或恶意的数据包。
- 在链的末尾,所有其他未被匹配的流量都被拒绝,并返回一个 ICMP 主机禁止消息。确保允许从 VPN 接口(例如
ppp+
)到外部接口(例如ens192
)的流量,以及从外部接口到 VPN 接口的流量
2.删除之前添加的 iptables
规则,您可以使用 iptables -D
命令,后跟与您之前添加的规则几乎相同的参数
/sbin/iptables -D FORWARD -p tcp --syn -i ppp+ -j TCPMSS --set-mss 1356
3.网络数据包捕获:使用 tcpdump
在 VPN 服务器上捕获数据包,特别是来自 VPN 客户端的数据包。这可能会帮助您确定是否有数据包被丢弃或延迟。
tcpdump -i ppp0 -n -v
4.常用的防火墙命令
查看防火墙已开放的端口:
firewall-cmd --list-ports
查看当前的默认区域:
firewall-cmd --get-default-zone
查看所有已启用的规则:
firewall-cmd --list-all
开放一个端口(例如,开放 TCP 的 8080 端口):
firewall-cmd --zone=public --add-port=8080/tcp --permanent
关闭一个端口(例如,关闭 TCP 的 8080 端口):
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
重新加载防火墙规则(在做了任何永久性的更改后,需要重新加载规则):
firewall-cmd --reload
查看所有可用的服务:
firewall-cmd --get-services
开放一个服务(例如,开放 http 服务):
firewall-cmd --zone=public --add-service=http --permanent
关闭一个服务(例如,关闭 http 服务):
firewall-cmd --zone=public --remove-service=http --permanent
查看防火墙的状态:
firewall-cmd --state
停止并禁用 firewalld
:
systemctl stop firewalld
systemctl disable firewalld
如果您还想保持 firewalld
运行,但允许所有流量:
您可以设置默认区域为 "trusted",这将允许所有入站和出站流量。
firewall-cmd --set-default-zone=trusted
firewall-cmd --reload
将默认区域设置回 "public" (如果您之前更改为 "trusted"):
firewall-cmd --set-default-zone=public
firewall-cmd --reload
允许 DNS 服务 (TCP 和 UDP 的 53 端口):
firewall-cmd --zone=public --add-service=dns --permanent
5.管理和运维PPTP服务器常用命令
备份重要pptp文件
对于 PPTP 服务器,通常需要备份以下文件:
/etc/pptpd.conf
/etc/ppp/options.pptpd
/etc/ppp/chap-secrets
-
创建备份目录:
mkdir -p /backup/pptp
-
备份文件: 使用
cp
命令备份这些文件:cp /etc/pptpd.conf /backup/pptp/ cp /etc/ppp/options.pptpd /backup/pptp/ cp /etc/ppp/chap-secrets /backup/pptp/
查看活跃的 PPP 连接: 当用户连接到 PPTP 服务器时,会为每个用户创建一个 PPP 接口。您可以使用 ifconfig
或 ip
命令来查看活跃的 ppp 接口:
ifconfig | grep ppp
或者
ip a | grep ppp
这会列出所有活跃的 PPP 接口。您可以通过计算列出的接口数量来得知当前连接的用户数量。
---------------------------------------------------------------------------------------------------------------------------------
免责声明
-
学习和交流目的:本博客中的所有内容,包括但不限于知识、文章、图像、代码片段和教程,仅供学习和交流目的。它们旨在帮助读者更好地了解和掌握技术,而不是鼓励或支持任何非法或不道德的行为。
-
不得用于非法目的:任何通过本博客获得的知识和技能都不得用于违法或不道德的目的,包括但不限于访问非法网站、侵犯他人的隐私或权利、传播恶意软件等。作者明确反对这类行为,并不承担因读者或第三方误用所提供内容而产生的任何直接或间接责任。
-
自行承担风险:读者在应用、测试或实践本博客中的任何知识或技术时,应自行判断其合法性和安全性,并自行承担所有风险。