这一篇我一开始写在百度贴吧,现在转到我的博客上来

另外现在已经证实直接映射方式可用,所以大家可先尝试直接映射。如果直接映射失败的话那么还是使用VPN连接的方式吧,这样操作90%的情况下都是可用的。


PC版的Minecraft可以用蛤蟆吃方便地联机,无需搭建MC服务器,然而无论是安卓还是苹果都没有蛤蟆吃这样的平台。而且,新版的PocketMineMP BUG相当严重。那么,MCPE如何才能实现无需服务器的远程联机呢?

方法一:自建VPN
需要原料:可联通的公用网络,可以运行MCPE的设备两台以上,PC一台(可选)
其实原理很简单。VPN全称Virtual Privat Network,即虚拟专网。蛤蟆吃的作用是组建虚拟局域网,其实蛤蟆吃就是一个轻松快捷的VPN网络工具。那么,移动平台是否也可以通过VPN的方式将两台相隔万里的设备连接到一起呢?答案是肯定的。
1

那么问题来了:我们如何获取VPN服务?至于网上贩售的那些VPN服务,虽然附带了一些特殊功能,但是我不能保证它可以帮助你进行联机,而且安全性得不到保障。下面我就来介绍一下自建VPN服务器的几个方法。

注意!!如果你使用了路由器请参考附录以配置路由器
1.1 在Windows下建立VPN服务器(非Server版Windows一次只能连接一人)
以Windows 7为例(Windows 8操作相同,XP用户请自行百度)①:
2

1、打开“网络和共享中心”,选择“更改适配器设置”

点击“更改适配器设置”

3
这里快速打开网络和共享中心
小贴士:如何快速进入“网络和共享中心”?点击电脑右下角的网络图标,然后再点击“进入网络和共享中心”就可以啦。
2、在“菜单栏”点击“文件”,然后选择“新建传入连接”(这一点很重要)

4
新建传入连接
小贴士:什么?我的电脑怎么没有菜单栏?别着急,这个真的可以有,按一下键盘上的Alt键看看效果,是不是很神奇的出现了……

3、选择允许使用VPN连接到本机的帐户,可以从列表中勾选,也可以“添加用户”
5
选择允许VPN连接到本机的账户

 

6
选择其他用户连接VPN的方式(重要!)

接下来选择其他用户连接VPN的方式,一般来说是选择“通过Internet”。当然,如果显示的连接方式是多项的话,那么请根据自己的需要请选择正确的方式。
4、这一步就到了设置网络参数环节了,如果对方连接后可以使用本地网络的DHCP服务器,那么可以跳过此设置。如果本地网络没有DHCP服务器的话就要先进行一下设置了,具体步骤如下:

7
设置网络参数(重要!)

选中“Internet 协议版本 4(TCP/IP)”, 点击“属性”按钮,选择“指定IP地址”(这里是根据用户自身的IP地址而设定,设置一个没有被使用的IP段即可),设置后请按确定, 然后点击“允许访问”就大功告成了。
小贴士:文字叙述真的看起来很繁琐,给人不知所云的感觉,不过,好在图很详细,不想看文字的直接看图吧。
5、到这里VPN服务器已经架设完毕了,其他用户已经可以利用上面的帐号以及你的IP地址通过VPN连接到你的网络了。有条件的同学赶紧试一下吧。
关于防火墙和内网用户的两点特别说明:
1.如果你有防火墙请允许1723和1701端口。
2.如果你是内网用户请在路由器上做1723和1701端口的映射,一般做1723就行了。开启DMZ主机指向开服的PC也可以。

1.2 在Linux下建立VPN服务器(以Ubuntu为例,其他Linux用户自行百度)②
在 Ubuntu 上搭建 VPN 服务器的方法非常多,比较著名的有 PPTP, L2TP/IPSec 和 OpenVPN。这三种方式中后两者的安全性比较好,但配置较麻烦。其中 OpenVPN 在 Windows/Mac 平台上还需要额外的客户端。而 L2TP/IPSec 方式虽然比较好,但我配置后,虽然 Windows 和 Linux 用户没有问题,但 Mac/iPhone 却始终无法连上,
PPTP 是这三者中配置最容易的方式,而且由于 Windows/Mac 系统中都内建相应的客户端,使用起来非常方便。
服务器环境是单网卡 eth0。
在 Ubuntu 中建立 pptp server 需要的软件包为 pptpd,用 apt-get 即可安装:
sudo apt-get pptpd
系统会自动解决依赖关系,安装好后,需要进行一番设置。首先编辑 /etc/pptpd.conf
sudo gedit /etc/pptpd.conf
去掉文件最末端的 localip 和 remoteip 两个参数的注释,并进行相应修改。这里,localip 是 VPN 连通后服务器的 ip 地址,而 remoteip 则是客户端的可分配 ip 地址。
localip 10.100.0.1
remoteip 10.100.0.2-10
编辑好这个文件后,我们需要编辑 /etc/ppp/pptpd-options 文件,还是用 gedit 编辑,命令这里就不写了。这里绝大多数参数只需维持原来的默认值即可,我们只需要改变其中的 ms-dns 选项,为 VPN 客户端指派 DNS 服务器地址:
ms-dns 202.113.16.10
ms-dns 208.67.222.222
修改 /etc/ppp/chap-secrets 文件,这里面存放着 VPN 的用户名和密码,根据你的实际情况填写即可。如文件中注释所示,第一列是用户名,第二列是服务器名(默认写 pptpd 即可,如果在 pptpd-options 文件中更改过的话,注意这里保持一致),第三列是密码,第四列是 IP 限制(不做限制写 * 即可)。
全部搞定后,我们需要重启 pptpd 服务使新配置生效:
sudo /etc/init.d/pptpd restart
找一台 Windows 电脑,新建个 VPN 链接,地址填服务器的 IP(或域名),用户名密码填刚才设置好的,域那项空着(如果你在 pptpd-options 中设置了,这里就保持一致),点连接就可以了。正常情况下您应该能够建立与服务器的 VPN 链接了。
建立连接之后,您会发现除了可以访问服务器的资源,其余内外和互联网的内容均无法访问。如果需要访问这些内容的话,我们还需要进一步设置:
首先,开启 ipv4 forward。方法是,修改 /etc/sysctl.conf,找到类似下面的行并取消它们的注释:
net.ipv4.ip_forward=1
然后使新配置生效:
sudo sysctl -p
有些时候,经过这样设置,客户端机器就可以上网了(我在虚拟机上这样操作后就可以了)。但我在实验室的服务器上这样操作后仍然无法访问网络,这样我们就需要建立一个 NAT。这里我们使用强大的 iptables 来建立 NAT。首先,先安装 iptables:
sudo apt-get intall iptables
装好后,我们向 nat 表中加入一条规则:
sudo iptables -t nat -A POSTROUTING -s 10.100.0.0/24 -o eth0 -j MASQUERADE
这样操作后,客户端机器应该就可以上网了。
但是,只是这样,iptables 的规则会在下次重启时被清除,所以我们还需要把它保存下来,方法是使用 iptables-save 命令:
sudo iptables-save > /etc/iptables-rules
然后修改 /etc/network/interfaces 文件,找到 eth0 那一节,在对 eth0 的设置最末尾加上下面这句:
pre-up iptables-restore < /etc/iptables-rules
这样当网卡 eth0 被加载的时候就会自动载入我们预先用 iptables-save 保存下的配置。
到此,一个 VPN Server/Gateway 基本就算架设完毕。当然,也许你按照我的方法做了,还是无法成功,那么下面总结一些我碰到的问题和解决方案:
无法建立 VPN 连接
安装好 pptpd 并设置后,客户端还是无法建立到服务器的连接。造成的原因可能有以下几种:
1. 服务器端的防火墙设置:PPTP 服务需要使用 1723(tcp) 端口和 gre 协议,因此请确保您的防火墙设置允许这两者通行。
2. 如果服务器在路由器后面,请确保路由器上做好相应的设置和端口转发。
3. 如果服务器在路由器后面,那么请确保你的服务器支持 VPN Passthrough。
4. 如果客户端在路由器后面,那么客户端所使用的路由器也必须支持 VPN Passthrough。其实市面上稍微好点的路由器都是支持 VPN Passthrough 的,当然也不排除那些最最最便宜的便宜货确实不支持。当然,如果你的路由器可以刷 DD-Wrt 的话就刷上吧,DD-Wrt 是支持的。
能建立链接,但“几乎”无法访问互联网
这里我使用“几乎”这个词,是因为并不是完全不能访问互联网。症状为,打开 Google 搜索没问题,但其它网站均无法打开;SSH 可用,但 scp 不行;ftp 能握手,但传不了文件。我就遇到了这种情况,仔细 Google 后发现原来是 MTU 的问题,用 ping 探测了一下果然是包过大了。知道问题就好办了,我们可以通过 iptables 来修正这一问题。具体原理就不讲了,需要的自己 Google。这里只说解决方案,在 filter 表中添加下面的规则:
sudo iptables -A FORWARD -s 10.100.0.0/24 -p tcp -m tcp –tcp-flags SYN,RST SYN
-j TCPMSS –set-mss 1200
上面规则中的 1200 可以根据你的实际情况修改,为了保证最好的网络性能,这个值应该不断修改,直至能保证网络正常使用情况下的最大值。
好了,至此,一台单网卡 pptp-server 就算完成了。

1.3 在安卓手机上建立VPN服务器(原创,无需电脑)
仅Root设备可用

8
下载Complete Linux Installer,按操作提示下载Ubuntu 13.10 只有内核的镜像文件,安装完成后启动Ubuntu 13.10(几乎无图形操作界面),然后在终端中按照在Ubuntu中搭建VPN服务器的方法即可,不过gedit命令需要改为vim命令。
如果使用Complete Linux Installer出错的话(我的一台设备就是这样),访问http://sourceforge.net/projects/linuxonandroid/files/?source=navbar下载启动脚本bootscript4-3.sh(安卓4.3或4.4,其中安卓4.4需要关闭SELinux,如果不会关闭直接安装LBE安全大师即可)或bootscript.sh(安卓4.2及以下),然后访问http://sourceforge.net/projects/linuxonandroid/files/Ubuntu/13.10/Core/ubuntu-13.10.CORE.ext4.v1.zip/download下载Ubuntu 13.10 Core版。
将启动脚本和解压出来的img文件放到一个文件夹里,打开终端模拟器,输入su,然后输入 cd (文件夹路径),然后运行启动脚本:sh bootscript.sh 或者 sh bootscript4-3.sh,然后按操作即可启动Ubuntu

建立好VPN服务器后,另一端连接此服务器,游戏开服端(设备1)进入游戏,另一端点击Play后点击右上角的Edit按钮,然后点击External按钮,添加服务器即可,端口默认为19132,不用管。添加完毕后,会看到游戏列表里多了一个出来。点击进入。

方法二:直连(仅猜想)
这个方法只是一个猜想,如果成功将会省去很多力气,但是遗憾的是在初步测试时始终无法成功,具体原因还在探索中。如果有朋友能够测试成功请告知我,谢谢。
猜想1:
手机直接连接有线网络(不经过路由器)或者使用流量,获取手机当前的IP后,另一方将此IP作为服务器添加至游戏列表。
猜想2:
手机连接路由器,路由器将DMZ主机设置为手机的IP或者将端口19132映射到手机当前的内网IP上,然后对方将游戏开服端的外网IP作为服务器添加至游戏列表。
注:如果你的网络供应商给你提供的网络的IP是动态分配的,使用花生壳可以自动将当前的外网IP映射到一个固定的域名上

附:路由器配置DMZ主机和端口映射的方法(以TP-LINK路由器为例)以及内网用户免配置开启外网映射的方法
在浏览器中输入192.168.1.1,登陆路由器管理界面
找到转发规则
然后如图

9
在虚拟服务器里配置端口映射

10
在这里配置DMZ主机
IP地址和DMZ主机都是开服的电脑或手机的内网IP
免配置的外网映射就要用到花生壳了内网版了,不过免费版每月限制1G流量而且延迟较重还要去抢,实在要用花生壳的话就去买一个专业版吧。

特别鸣谢:
百度贴吧@没事干凑热闹 @soul香橙
新浪微博@没事干凑热闹
优酷@小佛forman

尾注:经过没事干凑热闹(小佛forman)的协助测试,我发现在不需要任何辅助的前提下,电信与网通连接通畅,几乎没有延迟,莫非这是神迹?

——————————————
①引用自PCHome,为使用方便本人作了少量修改。原文连接:http://article.pchome.net/content-1382896.html
②引用自浪迹天涯的博客,为使用方便本人作了少量修改。原文链接:http://blog.sina.com.cn/s/blog_6797a6700100mhnl.html

本文章由经典老宋创作,转载请注明来源:C次元