DNS解决NAT映射后内网不能进入游戏的问题
适用环境:当只有一个公网IP时,内网中一台主机做服务器,接入负责内部网络地址转换(NAT)和端口映射的时候,外网可以进入游戏,而内网不能进入的时候。
众所周知,我们的SF有个CS文件夹,里面有几个配置文件,当你的服务器在内网的时候,必须将cs文件夹下的几个配置文件的IP设置为公网IP,然后通过在接入上来做端口映射来解决外网进入的问题。
在接入上可以使用PORTMAP等工具来实现智能的端口映射。这样的软件是在应用层上直接映射端口,所以不需要手动的选择是对哪一个网卡映射,这样实际上就避免了很多麻烦,但是更多的麻烦也同时出现了,portmap这样的软件效率很低,当连接数量达到一定的程度后,会非常耗费CPU资源,并且常常会出现只能对一部分其他IP映射的烦恼。这当然是我们不希望看到的。
不要灰心,有更好的端口映射工具,可以直接在链路层上映射。比如winroute和win2000自带的NAT,都是效率很高,并且都可以作为系统服务来运行的软件!所以我们强烈推荐使用这样的软件,占用CPU资源少,另外十分稳定,效率也很高。但是在链路层上映射也不能避免一个很关键的问题,那就是只能指定一个网卡接口,比如说我的接入服务器有两块网卡,一块是公网IP地址(如61.128.128.XXX),另一块是内网IP地址(192.168.0.1)使用NAT后,只能对一个接口进行端口映射。也就是说,服务器已经能够对公网开放了!但是很不幸的,内网却不能访问了。(是因为cs目录下的配置文件是公网IP的原因)
在网上有文章说,结合使用NAT的端口映射和portmap来使用,因为NAT的优先级高,所以可以先把外网的连接映射到内网中,然后内网的连接自动会用portmap进行映射,但是事实证明,这种方法不可行。(我实验过,如果是我搞错了,请指出,谢谢)而且如果内网用户量很庞大,也相当于加重了的负担。
经过多次挫折,我终于找到了一个非常好的办法!那就是使用域名来解决(动态域名也可以)!
原理是这样的:接入服务器使用NAT映射端口(如果有域名更好,没有可以去用花生壳),然后把游戏服务器的cs目录下的配置文件(一共4个)配置为你的域名。在任意一台主机(如接入服务器)上添加DNS服务,然后添加一个正向查找区域(标准主区域),在此区域中添加一个主机记录,指向你的内网游戏服务器地址(内网地址如服务器的地址是192.168.0.254)记得DNS服务器一定要启用递归,指向你的ISP指定的DNS服务器,如重庆地区的61.128.128.68。内网的其他客户机要修改TCP/IP的设置,DNS指向你的DNS服务器地址就行了(有两个,第一个填你的DNS服务器地址如192.168.0.1,第二个可以不填),实际上你的DNS服务器就只负责解析这一个IP(如果以后要添加新的服务器也很方便)。而外网的DNS解析,那就不用你管了,公网上的DNS会很好的解析的。
这样实现后,解决得很痛快,因为DNS也是一个系统的服务,效率也是很高的,而且只负责解析一个域名,基本上是不会占用CPU资源,而NAT也是效率很高的系统服务,呵呵。。。。。。(我做了,非常成功)
有很多朋友怕麻烦,就把接入服务器和服务器做成同一个服务器,这样首先不说的效率问题,问题就够你老人家受了,主要是SQL server暴露在公网上的问题。
说到安全,我就再罗嗦两句。为了我们的服务器,最好是让在内网中,不要轻易映射SQL server的端口(虽然这样确实很方便);注册页面最好不要用大家都在通用的,很不安全,还是自己写一套稳当,呵呵,还可以按需开发嘛;IIS的权限设置一定要把握好,最好在管理页面的虚拟目录中集成windows验证,这样就多了。