基于openwrt平台搭建局域网技术验证之一

1、VPN介绍

  简单的来说就是就是通过互联网达到访问某一服务器内局域网的效果。可参加网络拓扑图。其工作原理如下:

①通常情况下,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的数据包处理过程和上述过程一样,这样两个网络内的终端就可以相互通讯了

1.1、数据封装

主流的俩种技术是pptp和,采用的技术不同封装出的包也是不同的。

基于openwrt平台搭建局域网技术验证之一_第1张图片

两种协议的封装格式的详解可参考以下链接:

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

1.2、网络拓扑

如下是简单的网络拓扑图,外出办公人员建立客户端通过拨号服务器的公网ip进行连接服务器。连接成功后就可以访问服务器下的任何一台主机上的数据。

基于openwrt平台搭建局域网技术验证之一_第2张图片

2、-pptp服务器模式测试报告

2.1、测试目的

       验证pptp服务器模式的可行性。

       提供-pptp模式的服务器功能,供客户端连接访问内网。

2.2、参考资料

      参考链接:https://openwrt.org/docs/guide-user/services//pptp/basic

2.3、测试过程   

   测试过程需要用到的资源:

    • 路由器一个
    • win7系统电脑俩台
    • 交换机一个
    • 网线三根

     测试组网如下图所示:

基于openwrt平台搭建局域网技术验证之一_第3张图片

组网说明:

R0公司路由器

S1 交换机

R1 路由器1

PC1 个人电脑1

PC2 个人电脑2

 

  • (R0) lan口接(S1),保证(S1)接出去的设备可以访问互联网。
  • (S1)分别接(R1)wan口和(PC1),确保俩个设备可以正常上网。
  • (PC1)接(s1)后可以获取到以太网的ip,此处是192.168.21.103(郭乙标的ip测试时请修改成自己的ip,静态ip)
  • (R1)wan口接(S1) 后可以获取到以太网的ip,wan口ip是192.168.21.46(最好设置成静态ip,动态ip的话需要注意在客户端连接的时候检查ip是否改变)
  • (R1)lan口网关地址是192.168.1.1
  • (PC2)通过无线连接到(R1)上,分配得到的ip是192.168.1.244。该ip是动态获取的,后续测试需要注意此ip地址是否改变。因为我们要访问这个(PC2),所以必须要知道其ip是多少。
  • 在(PC1)发起pptp连接请求后,如果连接成功的话会获取的pptp服务器分配的ip,

此时是192.168.0.20,此ip测试时可以不用关心。对于我们来说不用care这个ip,内核会自己对这个ip做处理。

2.3.1 软硬件需求

硬件环境

CPU:MTK7628n

DDR:128M

Flash:16M

 

软件环境

Openwrt:14.07

Linux:3.10.14

2.3.2 测试步骤

  • 编译,在openwrt源码目录下make menuconfig,配置pptp服务器需要的包。pptpd, kmod-mppe,kmod-gre,kmod-ppp, ppp(此五个包需要在可视化界面配置上)然后执行make V=s,编译出原始固件。
  • 将编译出的

bin/ramips/openwrt-ramips-mt7628-mt7628-squashfs-sysupgrade.bin烧写到路由器中。并启动。

  • 修改/etc/config/pptpd文件:
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/init.d/pptpd文件:
此文件中的内容会修改以下四个文件/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 ##
}
  • 重启路由,pptp服务器已经配置好
  • 配置客户端(PC2)过程

基于openwrt平台搭建局域网技术验证之一_第4张图片

基于openwrt平台搭建局域网技术验证之一_第5张图片

基于openwrt平台搭建局域网技术验证之一_第6张图片

基于openwrt平台搭建局域网技术验证之一_第7张图片

基于openwrt平台搭建局域网技术验证之一_第8张图片

基于openwrt平台搭建局域网技术验证之一_第9张图片

其中①-④按照图中步骤选择即可。

  • ⑤ Internet地址是服务器公网ip地址,我们没有公网ip,这里使用的是路由器的wan口进行连接。即组网环境中的192.168.21.46 目标名称可以随便取,

回显示在你的网络环境中。

  • ⑥ 输入服务器为你分配的用户名和密码,即步骤三中的

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

 

2.4、测试结果

  • PC2能够ping 通192.168.1.244,即PC1的地址,没有数据丢失会连接超时。
  • PC2能够打开192.168.1.244的网页,网页内容如下:

基于openwrt平台搭建局域网技术验证之一_第10张图片

  • PC2可以远程登录到PC1上,并成功控制PC1的电脑。

 

感谢:guoyb提供支持

你可能感兴趣的:(openwrt)