赞
踩
目录
步骤 7:启用Linux系统的IP包转发功能 并设置转发策略
当配置PPTP(Point-to-Point Tunneling Protocol)服务器时,首先要确保你的服务器上已经安装了PPTP服务器软件。通常,在CentOS上使用pptpd
(PoPToP Point to Point Tunneling Server)软件包来配置PPTP服务器。以下是如何配置PPTP服务器的详细步骤:
这里我们首先安装了 EPEL 仓库,因为 pptpd
可能在 EPEL 仓库中
yum -y install epel-release
安装pptpd
软件包。如果尚未安装,可以使用以下命令安装:
yum -y install pptpd
安装 iptables-services
包,并使用它来管理 iptables
规则
yum -y install iptables-services
1.启动服务:安装完成后,启动 pptpd
服务:
systemctl start pptpd
2.自动启动:如果你想在系统启动时自动启动 pptpd
服务,可以使用以下命令:
systemctl enable pptpd
3.确认服务状态:你可以使用以下命令来检查 pptpd
服务的状态:
systemctl status pptpd
结果如图所示:
配置防火墙:如果你的系统运行了防火墙,确保 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
注意:不能关闭防火墙,因为要后面依靠防火墙的策略进行流量转发
打开 /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
:
/etc/ppp/options.pptpd
来配置PPTP连接。选项文件包含了有关连接的各种配置设置,例如认证方式、加密方式、DNS服务器等。localip <PPTP服务器的IP地址>
:
remoteip <分配给客户端的IP地址范围>
:
例如:
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:
proxyarp:
defaultroute:
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用户提供唯一的用户名和密码。
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
注意以下命令在系统重启之后需要重新输入:
- /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
完成以上配置后,重新启动PPTP服务:
systemctl restart pptpd
你可以使用以下命令检查PPTP服务的状态:
systemctl status pptpd
如果一切正常,你应该看到PPTP服务器处于活动状态,并且没有错误消息。
查看1723端口是否被监听,命令:
ss -ntlp
使用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
的区域和直接规则相关的链,这些链可能包含更具体的允许或拒绝规则。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 接口。您可以通过计算列出的接口数量来得知当前连接的用户数量。
---------------------------------------------------------------------------------------------------------------------------------
学习和交流目的:本博客中的所有内容,包括但不限于知识、文章、图像、代码片段和教程,仅供学习和交流目的。它们旨在帮助读者更好地了解和掌握技术,而不是鼓励或支持任何非法或不道德的行为。
不得用于非法目的:任何通过本博客获得的知识和技能都不得用于违法或不道德的目的,包括但不限于访问非法网站、侵犯他人的隐私或权利、传播恶意软件等。作者明确反对这类行为,并不承担因读者或第三方误用所提供内容而产生的任何直接或间接责任。
自行承担风险:读者在应用、测试或实践本博客中的任何知识或技术时,应自行判断其合法性和安全性,并自行承担所有风险。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。