基於openwrt平臺搭建局域網技術驗證之一

1、VPN介紹

  vpn簡單的來說就是就是通過互聯網達到訪問某一服務器內局域網的效果。可參加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、vpn數據封裝

vpn主流的倆種技術是pptp和l2tp,採用的技術不同封裝出的vpn包也是不同的。

兩種協議的封裝格式的詳解可參考以下鏈接:

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、vpn網絡拓撲

如下是vpn簡單的網絡拓撲圖,外出辦公人員建立客戶端通過撥號vpn服務器的公網ip進行連接服務器。連接成功後就可以訪問vpn服務器下的任何一臺主機上的數據。

2、vpn-pptp服務器模式測試報告

2.1、測試目的

       驗證pptp服務器模式的可行性。

       提供vpn-pptp模式的服務器功能,供客戶端連接訪問內網。

2.2、參考資料

      參考鏈接:https://openwrt.org/docs/guide-user/services/vpn/pptp/basic

2.3、測試過程   

   測試過程需要用到的資源:

    • 路由器一個
    • win7系統電腦倆臺
    • 交換機一個
    • 網線三根

     測試組網如下圖所示:

組網說明:

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)過程

其中①-④按照圖中步驟選擇即可。

  • ⑤ Internet地址是vpn服務器公網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的網頁,網頁內容如下:

  • PC2可以遠程登錄到PC1上,併成功控制PC1的電腦。

 

感謝:guoyb提供支持

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章