为什么要进行内网穿透
通常个人电脑无论是连接WIFI上网还是用网线上网,都是属于局域网里边的,外网无法直接访问到你的电脑,内网穿透可以让你的局域网中的电脑实现外网访问功能针对上面这句话中出现的内网和外网。我在以下作了解释。
- 局域网:(局域网(Local Area Network,LAN)是指在某一区域内由多台计算机互联成的计算机组。局域网是封闭型)
- 外网:(广域网(WAN,Wide Area Network)也称远程网(long haul network)。通常跨接很大的物理范围,所覆盖的范围从几十公里到几千公里,它能连接多个城市或国家,或横跨几个洲并能提供远距离通信,形成国际性的远程网络。)
通过内网穿透可以实现通过外网直接访问到你的电脑那么具体可以做什么呢?
- 发布应用/网站,外网可以访问(这是主要用途);我们平时做的应用开发都只能在局域网本地访问,通过内网穿透,可以是全外网访问(只要有网就能访问到);在做微信/支付宝支付回调的时候就需要用到这个了
- 可以实现远程控制(在家访问公司电脑不是问题)更多用途请问度娘,我暂时不具体介绍这个,因为作用在这里用途是很广泛的。
简单来说,就是利用公网服务器(任何接入互联网的设备都可以访问公网服务器)
在不同局域网内的设备全部连接到公网服务器后,由公网服务器进行IP分配,就可以实现同局域网内的设备互联互通
搭建环境:Ubuntu 16.04
基于阿里云服务器 搭载Ubuntun 16.04镜像
安装环境包
打开终端,输入命令 sudo apt-get install pptpd
下载并安装pptpd。
若已安装,可输入apt-get update
进行升级。
修改pptpd.conf中的配置信息
sudo vim /etc/pptpd.conf
在末尾增加下面两行,或者打开的内容里面找到这两行,取消掉注释
localip 192.168.0.1
remoteip 192.168.0.100-115,192.168.0.245
分别为创建pptp时的主机ip和连接pptp的其他主机使用的ip段,可以自行修改。
注意,这里的ip并不是指外网ip或者当前局域网ip,而是指创建(虚拟专用网络)会分配的ip地址。一般这个可以不用修改。
修改chap-secrets配置
连接pptp 所需要的账号和密码,修改配置文件/etc/ppp/chap-secrets
sudo vim /etc/ppp/chap-secrets
在末尾添加以下内容
# Secrets for authentication using CHAP
# client server secret IP addresses
vpn_pi1 pptpd pass_pi1 192.168.0.101
vpn_pi2 pptpd pass_pi2 192.168.0.102
vpn_pi3 pptpd pass_pi3 192.168.0.103
vpn_pi4 pptpd pass_pi4 192.168.0.104
vpn_pi5 pptpd pass_pi5 192.168.0.105
vpn_pc1 pptpd pass_pc1 192.168.0.106
vpn_pc2 pptpd pass_pc2 192.168.0.107
vpn_pc3 pptpd pass_pc3 192.168.0.108
vpn_pc4 pptpd pass_pc4 192.168.0.109
vpn_pc5 pptpd pass_pc5 192.168.0.110
末尾的表示可以使用任意IP连入,如果你要设置指定IP才能连接,可以将替换成对应的IP。支持添加多个账号。
设置ms-dns
配置使用的dns,修改配置文件
sudo vim /etc/ppp/pptpd-options
在末尾增加下面两行,或者打开的内容里面找到这两行,取消掉注释
# 这是谷歌的DNS 可以根据实际填写
ms-dns 114.114.114.114
ms-dns 8.8.8.8
开启转发
修改配置文件
sudo vim /etc/sysctl.conf
在开头增加下面内容,或者打开的内容里面找到这一行,取消掉注释
net.ipv4.ip_forward=1
保存之后执行
sudo sysctl -p
配置iptables
若未安装iptables 执行脚本安装
sudo apt-get install iptables
tips:若之前安装pptp失败的。执行以下脚本;如果是第一次安装可忽略以下内容(目的为了清除iptables里旧的规则)
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
然后,允许GRE协议以及1723端口、47端口:
sudo iptables -A INPUT -p gre -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 47 -j ACCEPT
下一步,开启NAT转发:
可以在终端输入ifconfig来
查看 ,我的服务器网卡为eth0
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
docker0 Link encap:Ethernet HWaddr 02:42:87:bf:eb:46
inet addr:172.17.0.1 Bcast:172.17.255.255 Mask:255.255.0.0
inet6 addr: fe80::42:87ff:febf:eb46/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7897 errors:0 dropped:0 overruns:0 frame:0
TX packets:11515 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5073005 (5.0 MB) TX bytes:18354053 (18.3 MB)
eth0 Link encap:Ethernet HWaddr 00:16:3e:34:58:f2
inet addr:172.30.209.142 Bcast:172.30.223.255 Mask:255.255.240.0
inet6 addr: fe80::216:3eff:fe34:58f2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1894480 errors:0 dropped:0 overruns:0 frame:0
TX packets:922566 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1854476478 (1.8 GB) TX bytes:565352364 (565.3 MB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:16 errors:0 dropped:0 overruns:0 frame:0
TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:2108 (2.1 KB) TX bytes:2108 (2.1 KB)
重启pptp服务
sudo service pptpd restart
配置阿里云开放端口
进入安全组管理界面
开放1723、47端口
测试
测试环境win10 专业版 VPN连接
开始菜单搜索VPN进入界面、添加VPN连接
选择PPTP协议建立连接
保存并登录即可
客户端搭建(Linux系统操作方式近似)
安装
安装pptp客户端
sudo apt-get install -y pptp-linux
配置
使用服务端设置的账号密码vpn_pc1/pass_pc1
sudo vim /etc/ppp/peers/pptpconf
// 添加如下内容:(自行更改IP, name, password)
pty "pptp xxx.xxx.xxx.xxx --nolaunchpppd"
name xxx
password xxx
remotename PPTP
require-mppe-128
require-mschap-v2
refuse-eap
refuse-pap
refuse-chap
refuse-mschap
noauth
persist
maxfail 0
defaultroute
replacedefaultroute
启动 & 关闭
pptp 客户端操作:
启动:pon pptpconf
关闭:poff pptpconf