上一篇文章讲到了如何在Windows机器上架设Minecraft服务器,现在我们来看看如何在内网环境下让其他朋友也能访问到自己的服务器。本篇也同样适用于一些其他支持局域网联机的游戏。

前置知识

IP地址

不看也可以

可能不少同学都或多或少地听过IP地址这个词。这里我们不讲严格定义,你只需要明白IP地址可以用来区分每一台联网的计算机就可以了。但由于技术上的限制和历史原因,IP地址是有限的(并且上限还不高,前几年已经完全分配完,也就是枯竭了),然而对于连接公网(国际互联网)来说IP地址又是不可或缺的一部分。于是,像三大运营商和部分小运营商(广电、长城之流)就会让许多用户使用同一个公网IP地址,由运营商的设备负责映射连接。

这种复用缓解了公网IP地址紧缺的问题,但代价就是用户访问公网不得不经过NAT(网络地址转换,也就是前文提到的多对一映射)设备,有时甚至要经过许多层NAT。把这个映射想象成一棵大树,树叶就是NAT后的每台计算机,树根就是多个计算机共同使用的一个IP地址。如果A树上叶子的蚂蚁a想要访问另一棵B树数据结构上的蚂蚁b,那么它必须经过许多个分叉到达A树干,然后爬到B树干后准确来到b所在树叶的分支。显然这非常麻烦,而且在计算机网络的世界中实现起来非常复杂。

但如果蚂蚁b就住在地面上,那么这种访问就变得没那么复杂了。蚂蚁a只需要爬下来就能轻易找到蚂蚁B,而且(更棒的是)a和b成功建立沟通后,后续它们之间的访问就变得非常轻松了。

如何查询自己的IP

很简单,直接百度IP地址就可以了,百度结果的第一项会显示你的IP地址。或者,你也可以使用IP138IPIP这样的网站查看到自己的IP。

最好的方法:申请公网IPv4地址

虽然国家近年来推行IPv6的力度非常之大(尤其是教育网方面,几乎所有学校都推广开了IPv6),IPv4仍然是当前最广泛、最通用的IP协议。需要说明的是,这种方法基本仅适用于使用家庭宽带的用户,而且电信宽带用户要比其他运营商更容易申请到(因为电信手上的地址数量比另外两家多。不过根据V2EX上的帖子,现在电信正在逐渐收紧公网IP的获取,可能过不了多久其他地区的新用户就难以拿到公网IP了)。

如何申请

前提条件

很简单,首先你得是机主,或者至少知道宽带安装的信息(机主身份证号码、楼栋、宽带帐号、机主姓名等)。如果你使用了路由器,那你还需要能够访问到路由器后台管理页面。

操作方法

  1. 打电话给你的运营商(如电信的10000)客服转人工,和客服说明要申请公网IP。如果客服问及你要做什么就回答装监控。顺利的话客服会将你转至处理这方面的师傅,核实装机信息后由运营商那边为你修改账户信息,然后他们会告诉你半小时后重启路由器和光猫就可以了。
  2. 按照电脑连接到路由器,由路由器拨号上网这一节的内容在路由器上设置端口转发。
  3. 不要忘记重启路由器和光猫!然后你就可以在路由器后台的上网信息里看到你的IP地址和百度/查询网站上得到的IP一致,说明成功了。
  4. 让你的朋友通过这个IP和你在路由器端口转发里设置的外部端口连接,愉快地游戏吧!

DLC内容:使用DDNS服务

通过DDNS服务提供商

由于运营商会在你每次拨号时下发一个新的IP地址,因此你的公网IP并不是一直不变的。你可以到花生壳这样的DDNS网站注册,并申请一个DDNS域名,然后到路由器后台设置。不过由于花生壳是国内服务商,注册域名时会要求你提供身份信息和手持身份证照片,有隐私泄露风险。使用其他DDNS服务提供商也可以,但是要确定你的路由器支持,而且其他服务商并不全是免费的。

购买一个域名

你也可以购买一个域名,像我现在使用的org域名一年大概是10美刀,如果是其他后缀(比如说top、site之类的)会比较便宜些;然后使用Cloudflare或者腾讯云DNSPOD提供的解析服务,加上本地电脑和类似https://github.com/jeessy2/ddns-go这样的项目做DDNS更新,虽然成本会比较高但是折腾的过程也很好玩,这里权做抛砖引玉。

我使用的域名注册商是Namesilo(*链接内含aff,可以当作是对我的支持:D),这家注册商提供com/net/org和其他各种奇怪顶级域名的注册,并且价格还算合理;能用支付宝付款,不需要外币账户;最重要的是提供WHOIS隐私保护服务,不会在ICANN的域名信息查询中显示注册人的身份信息!

使用Softether VPN提供的免费DDNS服务

你也可以使用Softether的VPN服务端。这是日本筑波大学的一个功能强大的VPN软件项目,可以让你出门在外也如同在家里的内网一般访问内容,它安装了特殊插件的客户端还能起到魔法的效果;但是在本节,我们要买椟还珠,仅使用它的DDNS服务。

可能会有点麻烦:使用公网IPv6地址

就像前面说的,国内正在大力推行IPv6地址,三大运营商基本都已经跟进了,也就是说,这个地址不用你额外操作就能获得;即使是教育网用户也能基本能拿到 一个 2001:da8的/128公网v6地址。有了这个基础,使用公网IPv6进行远程联机也并非不可能。

但是,大部分路由器都默认开启了IPv6防火墙,并且没有提供v6端口转发功能。为了玩转这个部分,你可能需要许多的计算机知识。(或者你运气很好,路由器提供了这个功能或是能够关闭IPv6防火墙;但本节的目的不是这个,我推荐打开百度查一查你的路由器支不支持。)

但如果你使用的是教育网……

不少高校为了避免受到攻击,都会将防火墙配置为拒绝传入连接。这样好不容易拿到的公网v6地址也没什么用了,实在是坏文明!

但你还是可以照着本节的内容试一下,如果没禁的话那就是最好不过了。

如何配置

本节的讲解针对OpenWRT系统。如果你没听过OpenWRT,那么接下来的内容可能会比较晦涩;但是学习也是冲浪的一部分:D

给路由器刷入OpenWRT

这是一个比较复杂的操作,如果你从没接触过相关内容,我推荐你充分查询资料并考虑后再去操作。这里推荐一个论坛:恩山无线论坛,几乎所有市售的路由器在这里都有讨论,还能找到现成的刷机包;你也可以当一个硬核玩家,手动编译路由器固件镜像并烧录到路由器的ROM。

在OpenWRT下开启IPv6

等待施工

OpenWRT端口转发操作指南

本节内容仅适用于有ip6tables的OpenWRT版本,并且不需要socat之类的插件。如果你使用了带有socat插件的固件,那设置v6端口转发是非常简单的,不用怎么配置。

使用FRP进行内网穿透

你有一个公网IP,但是现在人在学校/公司

现在假设你已经通过前面的教程申请到了一个公网的IP地址,但是人并不总是在家里的,而是经常在公司或是学校;针对这种情况,我们可以使用GoFRP来架设端口转发的服务端。在配置端口转发时,除了在路由器防火墙中配置想要转发的端口之外,还应该开放FRP的控制端口;此外,我推荐尽可能选择不常用的高位端口,并使用GoFRP自带的token等方式进行鉴权,避免你的FRP服务成为黑客的跳板。

FRP的配置可以参考这里

你什么都没有

对于这种情况,可能需要租用带有公网地址的云服务器来完成操作了。

使用贝锐(花生壳)提供的VPN组网服务

使用Softether提供的VPN Azure服务