简单的来说就是就是通过互联网达到访问某一服务器内局域网的效果。可参加网络拓扑图。其工作原理如下:
①通常情况下,VPN网关采取双网卡结构,外网卡使用公网IP接入Internet。
②网络一(假定为公网internet)的终端A访问网络二(假定为公司内网)的终端B,其发出的访问数据包的目标地址为终端B的内部IP地址。
③网络一的VPN网关在接收到终端A发出的访问数据包时对其目标地址进行检查,如果目标地址属于网络二的地址,则将该数据包进行封装,封装的方式根据所采用的VPN技术不同而不同,同时VPN网关会构造一个新VPN数据包,并将封装后的原数据包作为VPN数据包的负载,VPN数据包的目标地址为网络二的VPN网关的外部地址。
④网络一的VPN网关将VPN数据包发送到Internet,由于VPN数据包的目标地址是网络二的VPN网关的外部地址,所以该数据包将被Internet中的路由正确地发送到网络二的VPN网关。
⑤网络二的VPN网关对接收到的数据包进行检查,如果发现该数据包是从网络一的VPN网关发出的,即可判定该数据包为VPN数据包,并对该数据包进行解包处理。解包的过程主要是先将VPN数据包的包头剥离,再将数据包反向处理还原成原始的数据包。
⑤网络二的VPN网关将还原后的原始数据包发送至目标终端B,由于原始数据包的目标地址是终端B的IP,所以该数据包能够被正确地发送到终端B。在终端B看来,它收到的数据包就和从终端A直接发过来的一样。
⑥从终端B返回终端A的数据包处理过程和上述过程一样,这样两个网络内的终端就可以相互通讯了
主流的俩种技术是pptp和,采用的技术不同封装出的包也是不同的。
两种协议的封装格式的详解可参考以下链接:
http://blog.chinaunix.net/uid-30256248-id-5700083.html
https://blog.csdn.net/zhaqiwen/article/details/10083025
https://max.book118.com/html/2017/0729/124974157.shtm
如下是简单的网络拓扑图,外出办公人员建立客户端通过拨号服务器的公网ip进行连接服务器。连接成功后就可以访问服务器下的任何一台主机上的数据。
验证pptp服务器模式的可行性。
提供-pptp模式的服务器功能,供客户端连接访问内网。
参考链接:https://openwrt.org/docs/guide-user/services//pptp/basic
测试过程需要用到的资源:
测试组网如下图所示:
组网说明:
R0公司路由器
S1 交换机
R1 路由器1
PC1 个人电脑1
PC2 个人电脑2
此时是192.168.0.20,此ip测试时可以不用关心。对于我们来说不用care这个ip,内核会自己对这个ip做处理。
硬件环境
CPU:MTK7628n
DDR:128M
Flash:16M
软件环境
Openwrt:14.07
Linux:3.10.14
bin/ramips/openwrt-ramips-mt7628-mt7628-squashfs-sysupgrade.bin烧写到路由器中。并启动。
config service 'pptpd'
option localip '192.168.0.1' #服务器ip地址
option remoteip '192.168.0.20-30' #给客户端分配的ip地址
option enabled '1' #使能pptpd服务
option mppe '1' #是否mppe加密
option nat '1' #是否nat转发
option internet '1' #是否可以上网
config login
option username 'youruser' #服务器分配的用户名
option password 'yourpass' #服务器分配的密码
option enabled '1' #使能登录标志
option ipaddress '*' #允许登录的客户端地址,*表示所有ip均可登录
此文件中的内容会修改以下四个文件/etc/firewall.user,/etc/ppp/options.pptpd,/var/etc/pptpd.conf, /var/etc/chap-secrets
/var/etc/pptpd.conf此文件是从/etc/pptpd.conf拷贝而来,/var/etc/chap-secrets,此文件是/etc/ppp/chap-secrets文件软连接而来。
#!/bin/sh /etc/rc.common
# Copyright (C) 2006 OpenWrt.org
START=60
BIN=/usr/sbin/pptpd
DEFAULT=/etc/default/$BIN
RUN_D=/var/run
PID_F=$RUN_D/$BIN.pid
CONFIG=/var/etc/pptpd.conf
CHAP_SECRETS=/var/etc/chap-secrets
setup_dns() {
[ -n "$1" ] || return 0
echo ms-dns $1>>/etc/ppp/options.pptpd
}
setup_login() {
local section="$1"
## Code by VPN Server ##
config_get enabled "$section" enabled
[ "$enabled" -eq 0 ] && return 0
config_get ipaddress "$section" ipaddress
[ -n "$ipaddress" ] || local ipaddress = "*"
## Code by VPN Server ##
config_get username "$section" username
config_get password "$section" password
[ -n "$username" ] || return 0
[ -n "$password" ] || return 0
echo "$username * $password $ipaddress" >> $CHAP_SECRETS
## echo "$username pptp-server $password *" >> $CHAP_SECRETS
}
setup_config() {
local section="$1"
config_get enabled "$section" enabled
[ "$enabled" -eq 0 ] && return 1
mkdir -p /var/etc
cp /etc/pptpd.conf $CONFIG
config_get localip "$section" localip
config_get remoteip "$section" remoteip
[ -n "$localip" ] && echo "localip $localip" >> $CONFIG
[ -n "$remoteip" ] && echo "remoteip $remoteip" >> $CONFIG
## Code by VPN Server ##
config_get nat "$section" nat
config_get internet "$section" internet
echo Update firewall ...
sed -i -e "/## luci-app-pptpd/d" /etc/firewall.user
if [ "$nat" -eq 1 ]; then
echo "iptables -A forwarding_rule -i ppp+ -j ACCEPT ## luci-app-pptpd" >> /etc/firewall.user
echo "iptables -A forwarding_rule -o ppp+ -j ACCEPT ## luci-app-pptpd" >> /etc/firewall.user
echo "iptables -A output_rule -o ppp+ -j ACCEPT ## luci-app-pptpd" >> /etc/firewall.user
echo Update NAT rule ...
fi
if [ "$internet" -eq 1 ]; then
echo "iptables -A input_wan_rule -p tcp --dport 1723 -j ACCEPT ## luci-app-pptpd" >> /etc/firewall.user
echo "iptables -A input_wan_rule -p tcp --dport 47 -j ACCEPT ## luci-app-pptpd" >> /etc/firewall.user
echo "iptables -A input_wan_rule -p gre -j ACCEPT ## luci-app-pptpd" >> /etc/firewall.user
echo "iptables -A input_rule -i ppp+ -j ACCEPT ## luci-app-pptpd" >> /etc/firewall.user
echo Update input rule ...
fi
fw3 restart
config_get mppe "$section" mppe
sed -i -e 's/#*mppe/mppe/g' /etc/ppp/options.pptpd
if [ "$mppe" -eq 0 ]; then
sed -i -e 's/mppe/#mppe/g' /etc/ppp/options.pptpd
fi
sed -i -e '/ms-dns/d' /etc/ppp/options.pptpd
config_list_foreach "pptpd" "dns" setup_dns
## Code by VPN Server ##
return 0
}
start_pptpd() {
[ -f $DEFAULT ] && . $DEFAULT
mkdir -p $RUN_D
for m in arc4 sha1_generic slhc crc-ccitt ppp_generic ppp_async ppp_mppe; do
insmod $m >/dev/null 2>&1
done
ln -sfn $CHAP_SECRETS /etc/ppp/chap-secrets
service_start $BIN $OPTIONS -c $CONFIG
}
start() {
config_load pptpd
setup_config pptpd || return
rm $CHAP_SECRETS
config_foreach setup_login login
start_pptpd
}
stop() {
service_stop $BIN
## Code by VPN Server ##
sed -i -e "/## luci-app-pptpd/d" /etc/firewall.user
fw3 restart
## Code by VPN Server ##
}
其中①-④按照图中步骤选择即可。
回显示在你的网络环境中。
option username 'youruser' #服务器分配的用户名
option password 'yourpass' #服务器分配的密码
七、(PC1)通过无线连接(R1),获取到的ip是192.168.1.244
八、从(PC2)访问(PC1)(为了排除防火墙干扰,R1,PC1,PC2的防火墙全部是关闭状态)
①ping访问:在(PC2)运行里输入cmd,进入命令行模式,ping 192.168.1.244
②http访问:需要在(PC1)安装iis,百度搜索下载安装即可,在(PC2)浏览器中输入192.168.1.244。
③远程登录:需要在(PC1)确认远程登录已开启,在(PC2)运行里输入mstsc -v 192.168.1.244
远程登录开启连接:https://jingyan.baidu.com/article/63f23628177e6d0209ab3d60.html
iis7配置详解连接:http://www.udashi.com/article/2976.html
感谢:guoyb提供支持