谈谈如何使用Linux建立IP隧道
方法一:基于SSHde加密通道
SSH(SecureShell)是一套安全de网络连接程序,它可以实现通过网络远程登录其他系统,它就是加密detelnet协议。但是OPENSSH除了具you远程登录功能以外,更可以建立加密IP隧道。
wo men 这里假设Aliceorg服务器位于某个企业网de内网,其IP地址为1921682200,它通过NAT方式可以访问互联网。wo men 现在需要通过位于互联网上de名字为boborgde机器里访问Alice,也就是远程登录Alice。这时候wo men 就需要在bob和alice之间建立IP隧道。wo men 首先登录Alice,执行命令:
#ssh-R11022:127001:22 ideal@211111
该命令表示登录服务器211111,并将服务器de11022定向为本地de22号端口。执行完该命令以后,会提示输入ideal用户密码,输入以后就会登录到远程服务器bob。这时在bob上netstat-ln就会发现11022端口监听,保持从alice到bobdessh连接不断开。从互联网任何位置登录服务器bob以后,wo men 可以通过该隧道登录到alice服务器,执行以下命令:
#sshlocalhost-p11022
该命令表示连接本地de11022端口,因为wo men 已经创建了从alice到bobde隧道,因此连接本地de11022端口实际上就是通过隧道访问alicede22端口号。
这样通过这个隧道就可以实现登录位于内部网de服务器alice,但是因为ssh命令中指定了源端口,这种隧道一般只能支持一种协议,对于特定应用则具you加密带来de安全性de优点,但灵活性则不够,而且为了保证隧道畅通,从alice到bobdessh连接不能断开,也就意味着用户不能退出alice,否则隧道就会关闭。
方法二:使用vtun建立IP隧道
VTun(VirtualTUNnel,http://vtunsourceforgenet)是一个功能很强de软件,可以利用它来建立IP虚拟隧道,而且隧道de数目可以不受限制,完全依照机器de能力而定,并且在此基础上应用上可以实现***、移动IP等功能。
Vtun所支持de通道并且具you多种功能特性:
加密:支持基于CHAPde认证、并采用BlowFish128bit密钥。
压缩:支持zlib、lzo等多种压缩算法。
通信整形:平台无关,允许分别限制进入和流出通道de速率。
Vtun支持以下类型通道:
IPtunnel(tun):支持pppdeIP隧道。
以太网隧道(Ethernettunnel):支持可以实现以太网封装de各种协议,如:IPX、Appletalk、Bridge等。
串口通道(Serialtunnel,tty):支持串行电缆de传输方式,如:PPP、SLIP等。
管道通道(Pipetunnel,pipe):支持所you能使用Unix管道de程序。
Vtun支持多种平台,包括:Linux、BSD以及Solaris。
11 负载均衡介绍
111 负载均衡的妙用
112 为什么要用lvs
那为什么要用lvs呢?
ü 简单一句话,当并发超过了Nginx上限,就可以使用LVS了。
ü 日1000-2000W PV或并发请求1万以下都可以考虑用Nginx。
ü 大型门户网站,电商网站需要用到LVS。
12 LVS介绍
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统,可以在UNIX/LINUX平台下实现负载均衡集群功能。该项目在1998年5月由章文嵩博士组织成立,是 中国国内最早出现的自由软件项目之一 。
121 相关参考资料
LVS官网: http://wwwlinuxvirtualserverorg/indexhtml
相关中文资料
122 LVS内核模块ip_vs介绍
ü LVS无需安装
ü 安装的是管理工具,第一种叫ipvsadm,第二种叫keepalive
ü ipvsadm是通过命令行管理,而keepalive读取配置文件管理
ü 后面我们会用Shell脚本实现keepalive的功能
13 LVS集群搭建
131 集群环境说明
主机说明
web环境说明
web服务器的搭建参照:
Tomcat:
http://wwwcnblogscom/clsn/p/7904611html
Nginx:
http://wwwcnblogscom/clsn/p/7750615html
132 安装ipvsadm管理工具
安装管理工具
查看当前LVS状态,顺便激活LVS内核模块。
查看系统的LVS模块。
133 LVS集群搭建
命令集 :
检查结果 :
ipvsadm参数说明: (更多参照 man ipvsadm)
134 在web浏览器配置操作
命令集 :
至此LVS集群配置完毕 !
135 进行访问测试
浏览器访问:
命令行测试:
抓包查看结果:
arp解析查看:
14 负载均衡(LVS)相关名词
术语说明:
141 LVS集群的工作模式--DR直接路由模式
DR模式是通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器将响应后的处理结果直接返回给客户端用户。
DR技术可极大地提高集群系统的伸缩性。但要求调度器LB与真实服务器RS都有一块物理网卡连在同一物理网段上,即必须在同一局域网环境。
DR直接路由模式说明:
a)通过在调度器LB上修改数据包的目的MAC地址实现转发。注意,源IP地址仍然是CIP,目的IP地址仍然是VIP。
b)请求的报文经过调度器,而RS响应处理后的报文无需经过调度器LB,因此,并发访问量大时使用效率很高,比Nginx代理模式强于此处。
c)因DR模式是通过MAC地址的改写机制实现转发的,因此,所有RS节点和调度器LB只能在同一个局域网中。需要注意RS节点的VIP的绑定(lo:vip/32)和ARP抑制问题。
d)强调一下:RS节点的默认网关不需要是调度器LB的DIP,而应该直接是IDC机房分配的上级路由器的IP(这是RS带有外网IP地址的情况),理论上讲,只要RS可以出网即可,不需要必须配置外网IP,但走自己的网关,那网关就成为瓶颈了。
e)由于DR模式的调度器仅进行了目的MAC地址的改写,因此,调度器LB无法改变请求报文的目的端口。LVS DR模式的办公室在二层数据链路层(MAC),NAT模式则工作在三层网络层(IP)和四层传输层(端口)。
f)当前,调度器LB支持几乎所有UNIX、Linux系统,但不支持windows系统。真实服务器RS节点可以是windows系统。
g)总之,DR模式效率很高,但是配置也较麻烦。因此,访问量不是特别大的公司可以用haproxy/Nginx取代之。这符合运维的原则:简单、易用、高效。日1000-2000W PV或并发请求1万以下都可以考虑用haproxy/Nginx(LVS的NAT模式)
h)直接对外的访问业务,例如web服务做RS节点,RS最好用公网IP地址。如果不直接对外的业务,例如:MySQL,存储系统RS节点,最好只用内部IP地址。
DR的实现原理和数据包的改变
(a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
(b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
(c) IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址
(d) 由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server。
(e) RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP
(f) 响应报文最终送达至客户端
15 在web端的操作有什么含义?
151 RealServer为什么要在lo接口上配置VIP?
既然要让RS能够处理目标地址为vip的IP包,首先必须要让RS能接收到这个包。
在lo上配置vip能够完成接收包并将结果返回client。
152 在eth0网卡上配置VIP可以吗?
不可以,将VIP设置在eth0网卡上,会影响RS的arp请求,造成整体LVS集群arp缓存表紊乱,以至于整个负载均衡集群都不能正常工作。
153 为什么要抑制ARP响应?
① arp协议说明
为了提高IP转换MAC的效率,系统会将解析结果保存下来,这个结果叫做ARP缓存。
ARP缓存表是把双刃剑
ARP广播进行新的地址解析
测试命令
windows查看arp -a
③arp_announce和arp_ignore详解
lvs在DR模式下需要关闭arp功能
arp_announce
对网络接口上,本地IP地址的发出的,ARP回应,作出相应级别的限制:
确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口
arp_ignore 定义
对目标地定义对目标地址为本地IP的ARP询问不同的应答模式0
抑制RS端arp前的广播情况
抑制RS端arp后广播情况
16 LVS集群的工作模式
DR(Direct Routing)直接路由模式
NAT(Network Address Translation)
TUN(Tunneling)隧道模式
FULLNAT(Full Network Address Translation)
161 LVS集群的工作模式--NAT
通过网络地址转换,调度器LB重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器,真实服务器的响应报文处理之后,返回时必须要通过调度器,经过调度器时报文的源地址被重写,再返回给客户,完成整个负载调度过程。
收费站模式---来去都要经过LB负载均衡器。
NAT方式的实现原理和数据包的改变
(a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
(b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
(c) IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP
(d) POSTROUTING链通过选路,将数据包发送给Real Server
(e) Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP
(f) Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP
LVS-NAT模型的特性
l RS应该使用私有地址,RS的网关必须指向DIP
l DIP和RIP必须在同一个网段内
l 请求和响应报文都需要经过Director Server,高负载场景中,Director Server易成为性能瓶颈
l 支持端口映射
l RS可以使用任意操作系统
l 缺陷:对Director Server压力会比较大,请求和响应都需经过director server
162 LVS集群的工作模式--隧道模式TUN
采用NAT技术时,由于请求和响应的报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。
为了解决这个问题,调度器把请求的报文通过IP隧道(相当于ipip或ipsec )转发至真实服务器,而真实服务器将响应处理后直接返回给客户端用户,这样调度器就只处理请求的入站报文。
由于一般网络服务应答数据比请求报文大很多,采用 VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。
VS/TUN工作流程,它的连接调度和管理与VS/NAT中的一样,只是它的报文转发方法不同。
调度器根据各个服务器的负载情况,连接数多少,动态地选择一台服务器,将原请求的报文封装在另一个IP报文中,再将封装后的IP报文转发给选出的真实服务器。
真实服务器收到报文后,先将收到的报文解封获得原来目标地址为VIP地址的报文, 服务器发现VIP地址被配置在本地的IP隧道设备上(此处要人为配置),所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。
TUN原理和数据包的改变
(a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。
(b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
(c) IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP
(d) POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。 此时源IP为DIP,目标IP为RIP
(e) RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP
(f) 响应报文最终送达至客户端
LVS-Tun模型特性
163 LVS集群的工作模式--FULLNAT
LVS的DR和NAT模式要求RS和LVS在同一个vlan中,导致部署成本过高;TUNNEL模式虽然可以跨vlan,但RealServer上需要部署ipip隧道模块等,网络拓扑上需要连通外网,较复杂,不易运维。
为了解决上述问题,开发出FULLNAT
该模式和NAT模式的区别是:数据包进入时,除了做DNAT,还做SNAT(用户ip->内网ip)
从而实现LVS-RealServer间可以跨vlan通讯,RealServer只需要连接到内网。类比地铁站多个闸机。
17 IPVS调度器实现了如下八种负载调度算法:
a) 轮询(Round Robin)RR
调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
b) 加权轮叫(Weighted Round Robin)WRR
调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。
调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
c) 最少链接(Least Connections) LC
调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。
如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。
d) 加权最少链接(Weighted Least Connections) Wlc
在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
e) 基于局部性的最少链接(Locality-Based Least Connections) Lblc
"基于局部性的最少链接" 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。
该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器。
若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务 器,将请求发送到该服务器。
f) 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
"带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。
它与LBLC算法的不同之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。
该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器。
若服务器超载,则按"最小连接"原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。
同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的 程度。
g) 目标地址散列(Destination Hashing) Dh
"目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
h) 源地址散列(Source Hashing)SH
"源地址散列"调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器。
若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
18 LVS+Keepalived方案实现
181 keepalived功能
1 添加VIP
2 添加LVS配置
3 高可用(VIP漂移)
4 web服务器 健康 检查
182 在负载器安装Keepalived软件
# 检查软件是否安装
183 修改配置文件
lb03上keepalied配置文件
lb04的Keepalied配置文件
keepalived persistence_timeout参数意义 LVS Persistence 参数的作用
http://blogcsdnnet/nimasike/article/details/53911363
184 启动keepalived服务
185 在web服务器上进行配置
注意:web服务器上的配置为临时生效,可以将其写入rclocal文件,注意文件的执行权限。
使用curl命令进行测试
至此keepalived+lvs配置完毕
19 常见LVS负载均衡高可用解决方案
Ø 开发类似keepalived的脚本,早期的办法,现在不推荐使用。
Ø heartbeat+lvs+ldirectord脚本配置方案,复杂不易控制,不推荐使用
Ø RedHat工具piranha,一个web界面配置LVS。
Ø LVS-DR+keepalived方案,推荐最优方案,简单、易用、高效。
191 lvs排错思路
UT2003服务器架设指南
做服务器前先到:
http://wwwunrealtournament2003com/atedserverphp
下载服务器版UT2003,(v2107, Windows: 265MB | Linux: 249MB)安装需要780M硬盘空间。
http://ut2003masterepicgamescom/utrver/cdkeyphp
申请服务器专用CD-KEY
下载服务器安装文件后:
linux用户:新建一个用户帐号专门用来运行服务器,用这个用户登录,运行ut2003lnxdedshbin文件。跟具屏幕提示继续。
windows用户:把zip文件解压缩到硬盘中,没有安装程序,解开来就行了。
在配置服务器前先下载最新升级补丁,给服务器程序升级。
再下载evolutionpack2,它能帮你解决许多用web页面管理上面的问题,和修正了一些bug。
http://unrealcpglnet/UT2003/patch/evolutionpack2zip 20KB
安装服务器:
在你下载完并解压缩所有需要的文件后:
A 如果你已经在机器上装了零售版UT2003,那么跳到第M条
B 如果你下载了免费的服务器专用程序,且不需要再申请服务器专用cdkey,那么跳到第D条
C 如果你是使用零售版UT2003来运行服务器的话,那先安装游戏,游戏会自动添加注册表中必要的信息。跳到第M条。
D 打开 http://ut2003masterepicgamescom/utrver/cdkeyphp ,输入一些需要的信息后,服务器专用CDkey会通过email发给你。linux用户需要把收到的cdkey文件复制到你的系统文件夹中
E 如果你已经知道怎么在注册表里添加CDKEY就跳过这一步到J。
F 点击开始--->运行。在窗口中输入 regedit ,回车。
G 在注册表管理器中,双击"HKEY_LOCALMACHINE"展开它,双击"software"展开它,在它下面找到"Unreal Technology"文件夹如果这个文件夹已经存在,跳到J。
H 添加一个新的键值。单击"software"文件夹,然后点编辑--->新建--->主键。一个新的文件夹就出现了,有一个高亮的区域让你给它命名,输入Unreal Technology 回车。
I 单击刚才新建的文件夹,点编辑--->新建--->主键。一个新的文件夹出现啦,又有一个高亮的区域让你命名,输入 Install Apps 回车,跳到K。
J 在Unreal Technology Installed apps文件夹下找到"UT2003"文件夹,如果它存在,跳到L
K 单击"Installed Apps"文件夹,点编辑--->新建--->主键。一个崭新的文件夹诞生啦,有一个高亮的区域让我们命名,输入UT2003 回车。
L 单击"UT2003"文件夹,点编辑--->新建--->建值。一个新的文件夹又出现啦,又有一个高亮的区域可以让我们起名字啦。输入 "CDKEY",回车。双击新建立的键值,你就可以编辑它的值。在里面输入你的cdkey序列号。点OK。关掉注册表编辑器。
M 如果你知道怎么用命令行命令进入你的虚幻安装文件夹里的system文件夹,跳到步骤O
N 用命令行建立服务器。我把我的文件安装在UT2003server,我用这个举例子,输入cd ut2003server\system
O 输入ucc server DM-Antalusut2
如果一切顺利,一个专用服务器就架设好了,游戏中的地图是DM-Antalus。
默认下面,专用服务器的配置是给internet游戏配置的。这意味着它他尝试和国外的主服务器联系把它加入到主服务器的数据库里,这样你的服务器就可以出现在别人的服务器搜索列表里。目前有两个不同的主服务器在运行,Epic的和Gamespy的。
如果你在机器上已经安装了零售版的UT2003,那就不必运行Epic mail给你的reg文件了,否则你注册表里的CDKEY会被改成服务器专用的,这样你自己就不能用这台机器玩了。
如果你是在居域网里建立服务器,并且想禁止UT2003和主服务器联系那就编辑UT2003ini里修改下面的句子(如果找不到这部分,就在最后加后这几行):
[IpDrvMasterServerUplink]
DoUplink=False
UplinkToGamespy=False
配置服务器
现在你应该知道最基本的架设服务器的方法了,你需要把它配置成你需要的。下面的每个部分都有详细的常见问题解答
System 文件夹里有最重要的三个文件:userini runserverbat和ut2003ini 。 userini保存了地图循环列表。ut2003ini保存了许多其他设置。runserverbat 保存了启动服务器的设置。Linux用户没有runserverbat文件,你要把每次都输入一长串命令启动服务器,或者你必须用一个外壳脚本启动服务器。(linux上用脚本启动UT2003服务器的例子参见http://wwwina- communitycom/forums/showthreadphps=&threadid=231043)
如果你架设多个服务器,通常你会使用一个共同的ut2003ini文件,然后用不同的runserverbat或者外壳脚本启动不同的服务器,下面是一个runserverbat的例子:
uccexe server DM-Antalusgame=XGameXDeathmatchmaxplayers=16minplayers=4timelimit=20fraglimit=25
uccexe 是服务器的执行文件,"server"告诉uccc下面要架设一个专用服务器。后面的东西是一些参数,设置服务器的游戏规则。第一条是服务器初始游戏的地图名字,这个例子中是DM-Antalus。跟着是游戏类型,例子中是死亡模式。不同的参数用问号分隔。不管你输入多少参数,整个命令都必须在一行中,如果分开来就不管用了。
下面列出ucc后面可以使用的所有参数列表。注意下面有一些参数在运行服务器是是感觉不出有什么变化的,列出它们只是为了列表了完整性:
AccessControl 用来打开高级管理员系统。和UT2003ini中[EngineGameInfo]部分里的AccessConrolClass一行的参数相同。
AdminName=xxxx 网页管理和控制台管理员的名字--参看下面的高级网页管理员部分。
adminpassword=xx 管理员密码。至少5位,否则无效。
bAutoNumBots=true/false 设置成true在人数小于地图默认设定的最小数时,会自动加入电脑bot补足。设置成false则不会。
autoadjust=true/false 设置成true,电脑bot会跟具玩家水平自动调整自己的等级。false则不会。
bPlayerMustBeReady=true/false 设置成true打开比赛模式,每局开时前所有玩家要按下鼠标确认后游戏才开始。false则不需要。
Balanceteams=true/false 自动分配玩家平衡队伍。
BlueTeam= 设置蓝队的名字。但是,不要以为你可以改变队伍的名字。However, don't get clever and decide you'll name the blue team Purple or something like that Many classes in the game refer to this variable to perform team info logic这句话不太好翻自己看吧。总之最好不要加这个参数,加上它会有不良后果。
BlueTeamAI= 特别的参数用来控制蓝队电脑AI。给MOD制作者用来配置自己写的AI给新的游戏模式用的。别碰它。
BlueTeamSymbol= 设置蓝队的队标。最好别设它。
Character=X 玩家用的人物,架服务器时无效。
Class 如果在架服务器的时候使用,在服务器玩的玩家只能用默认的人物皮肤。通常玩家都会用自己喜欢的人物皮肤。所以这个命令毫无用处。
difficulty=x 设置电脑登记,从1到7分别是novice到godlike。
FF=x 友队伤害的百分比。0是关闭,1是100% 所以25就是25%友队伤害。
fraglimit=x 死亡模式最多杀人数。
game= 游戏类型,可以用:xDeathmatch, xCTFgame,xBombingRun,或者xDoubleDom
gamepassword= 做为客户端加入游戏时需要的密码。
GameRules 设置特别的GameRules类,GameRules是mutator在UT2003中增加的新类型。通常你不需要用它。几乎所有的mod都会自己动配置它们自己的GameRules。
Gamespeed=x 设置游戏速度,默认是1。最大2
Gamestats=true/false 设置成true会打开统计功能(玩家的游戏资料,如命中率等会上传到主服务器资料库进行统计并参加全世界排名),电脑数量必须设为0才能生效。
goalscore=x CTF,DOM和BR模式里的队伍分数上限。
maxlivers=x last man standing模式,死x后玩家就出局,直到只剩最后一人游戏结束。
maxplayers=x 最大同时游戏人数。
maxspectators=x 最大同时观战者人数。
minplayers=x 最小游戏人数,小于此数用电脑bot补足。
mutator= 在游戏中添加mutator(具体看下面)
numbots=x 设置电脑bot数量。注意打死bot,游戏统计功能就无效了。
Password=xxxx 别的游戏者端加入游戏时需要的密码。
PlayerMustbeready=true/false 在每局开始前等待其他的玩家。
QuickStart 允许游戏在没有人的时候照常进行,当然有电脑bot在玩的时候有效。
RedTeam 参看BlueTeam
RedTeamAI 参看BlueTeamAI
RedTeamSymbol 参看BlueTeamSymbol
SaveGame 继续一个保存过的单人游戏。架服务器时没用。
SpectatorOnly=True/False 客户端选项,允许客户端用命令行指定观察者模式,架服务器时没用。
Team 客户端选项,允许客户端用命令行指定希望加入的队伍。同样架服务器时没用。
translocator=true/false 设置为true允许使用移位器,false相反。
timelimit=x 每局时间限制。
Tournament=true/false 设置成竞技场模式
weaponstay=true/false 武器保留。
几个例子:
ucc server DM-Antalusgame=XGameXDeathmatchminplayers=4 架设死亡模式服务器,初始地图DM-Antalus,最少4人,不足4人用电脑补足。
ucc server CTF-Citadelgame=XGamexCTFGameFF=0 架设夺旗模式服务器,初始地图CTF-Citadel,无友队伤害。
ucc server DOM-SunTemplegame=xGamexDoubleDommutator=UnrealGameMutLowGrav 双重据点模式服务器,初始地图DOM-SunTemple,低重力模式开启。
ucc server BR-Anubisgame=XGamexBombingRunweaponstay=true 架设BR模式服务器,初始地图BR-Anubis,武器保留开启。
ucc server DM-Curse3game=XGamexTeamGamefraglimit=100 团队死亡模式,初始地图DM-Curse3,杀人数上限100
关于和主服务器的联系
如果你不想你的服务器显示在游戏的服务器搜索列表里,或者你只是在居域网里的服务器,你可以在UT2003ini里把下面这些关掉
[IpDrvMasterserverUplink]
DoUplink=true|false 控制你的服务器是否与internet上的主服务器联系。
UplinkToGamespy=true|false 和DoUplink相似,是决定是否和gamespy服务器建立联系。
SendStats=true|false 是否发送统计信息到主服务器
ServerBehindNAT=true|false 服务器是否在网关后面。
DoLANBroadcast=true|false 设置服务器是否可以在居域网中查找到。一般设true
地图循环和个性化地图列表
默认下游戏会地图会循环出现。 循环顺序在userini文件里面控制。 每个游戏类型都有一个部分列出循环的地图。你可以编辑它,去掉你不喜欢的,加上你喜欢的地图。如
[XInterfaceMapListDeathMatch]
MapNum=0
Maps=DM-Morbias-2k3
Maps=DM-Spacepir8
Maps=DM-KillingField
Maps=DM-Deck16]i[-BETA
Maps=DM-MoonTemple
Maps=DM-Reigncaster
Maps=DM-Golgatha
Maps=DM-Tooth-N-Claw
Maps=DM-Stage1
Maps=DM-Liandri2003_BETA2
如果你想玩更多的地图,就去网上下载吧。把他们解压缩后把ut2文件放到map文件夹里,utx放到texture文件夹里,以及其他相应文件都放到相应目录里,你就能使用新地图了。
在一个游戏服务器上运行多个游戏类型
你可能会想在一个游戏服务器上运行多个游戏类型,比如 CTF,DOM,BR。可以用以下方法切换地图,举例如下:
比如 我们先开始一个死亡模式游戏在DM-Asbestos地图上。因为现在是死亡模式,游戏结束后UT会检查userini中[XInterfaceMapListDeathMatch]部分索取下一张地图的名字。它找到了BR-Anubis地图名字,然后就切换到BR模式读取BR-Anubis地图。一但BR-Anubis的游戏结束后,UT会检查 [XInterfaceMapListBombingRun]部分,因为已经是BR模式了。它又找到CTF-Citadel地图,然后就换成CTF模式,继续
[XInterfaceMapListCaptureTheFlag]
MapNum=0
Maps=DM-Asbestosgame=XGamexDeathMatch
[XInterfaceMapListDeathMatch]
MapNum=0
Maps=BR-Anubisgame=XGamexBombingRun
[XInterfaceMapListBombingRun]
MapNum=0
Maps=CTF-Citadelgame=XGamexCTFGame
第三方地图和重定向
如果你使用了不是游戏自带的第三方地图,别人连上服务器就可能花很长时间下载地图同时占用别的游戏者的带宽使游戏不流畅,解决方法可以是把地图文件放到另一个网页服务器上然后告诉客户端自动从那里下载
用 UT2003compress(可以在http://wwwdrunksniperscom下载)的ut2003ini 下面的部分重定向下载服务器:
IpDrvHTTPDownload]
HTTPServer=http://serverdomainname/myUTmaps/
Proxyserver=
Proxyport=
UseCompression=True
记住httpserver=后面的地址最后一定要加上个"/" ,否则它不会工作。如果碰到问题的话,把域名改成网页服务器的IP地图试试看(比如192168110)
Mutators
Mutators要和启动命令加在同一行里。下面的例子是架设一个死亡模式的服务器地图是DM-Asbestor带大头的mutator和Instagib的mutator:
uccexe DM-AsbestosGame=XGamexDeathmatchMutator=UnrealGameMutBigHead,XGameMutInstaGib
默认mutator参数列表:
Arena - XWeaponsMutArena
Big Head - UnrealGameMutBigHead
Float-Away Corpses - XGameMutHeliumCorpses
InstaGib - XGameMutInstaGib
Zoom InstaGib - XGameZoomInstaGib
LowGrav - UnrealGameMutLowGrav
No Adrenaline - XGameMutNoAdrenaline
No Super Weapons - XWeaponsMutNoSuperWeapon
Quad Jump - XGameMutQuadJump
AutoHealing - XGameMutRegen
Slow Motion Deaths - XGameMutSlomoDeath
Species Specific Stats - XGameMutSpeciesStats
Vampire - XGameMutVampire
注意部分mutator参数的前缀的不同:XWeapons , UnrealGame 等。
给每张地图不同的Mutator
你可以通过修改userini为每张地图设置不同的mutator 。除非你换掉它们,这些mutator会在所有地图中生效。你可以用"mutator="后面什么也不要加来在下一张地图中去掉mutator。下面的例子是在DM-Antalus地图上的游戏带有Slow-mo death和low-grav两个mutator,然后在下一张DM-Golgotha时去掉它们。
Maps=DM-Reigncaster
Maps=DM-Antalusgame=XGamexDeathMatchmutator=XGameMutSlomoDeath,unrealGameMutLowGrav
Maps=DM-Golgathamutator=
Maps=DM-Asbestos
同样的方法可以加载其他的命令在后面,比如你可能想在某一张地图上有队友伤害,然后在下一张地图中去掉它:
Maps=CTF-ChromeFF=075
Maps=CTF-CitadelFF=0
页面管理员和高级页面管理
基本的页面管理员通过在runserverbat里指定管理员名字和密码,并编辑ut2003ini中[UWebWebServer]部分启用。这将允许你通过web页面完全控制服务器,只需要一个管理员帐号。注意,这些都不需要通过IIS或者Apache就可以完成。UT服务器提供了自己的web页面服务器。如果你的服务器上运行了IIS或者Apache,你要把它们的监听端口口改成80以外的。
[UWebWebServer]
bEnabled=True
Listenport=xxxx
高级网页管理员允许多个不同控制权限的管理员帐号。注意,那个evolutionpack目前发现在使用高级管理员下有潜在的严重安全漏洞。我强烈建议在互联网远程控制系统中不要使用它。
具体的高级管理员指南参见http://wwwunrealadminorg/modulesprticle&artid=7
你应该在你的runserverbat里加上管理员名字和密码参数,除非你不想使用高级网页管理工具。
一台机器上架设多个服务器
你可以有两种方法在一台机器上架设多个服务器:给每个服务器不同的端口号,或者分配不同的IP地址给你的每个UT服务器,
如果你用不同的端口号架设服务器,你可能碰到他们在游戏的服务器搜索列表里显示不出来的问题。
如果你有多个IP你可以用-multihome 参数在runserverbat里给每个服务器绑定不同IP。例如下面把IP地址19216801绑到服务器上
ucc server DM-Antalusgame=XGamexDeathMatch -multihome 19216801
在linux下面,你需要恋情multihome=ip的参数:
ucc server DM-Antalusgame=XGamexDeathMatch -multihome=19216801
服务器在网关,防火墙,路由器后面
如果你的服务器在网关,防火墙,路由器后面你需要打开一些端口让外面的客户端连进来。默认的端口有7777,7778,7787,7788,28900,28902。我现在还不确定他们是TCP,UDP或者两者都是。
你还要在UT2003ini中找到[IpDrvMasterServerUplink]部分,把ServerBehindNat设为true。
除非你改变了端口(如上面说的一台机器运行多个服务器)那么凡是你用到的端口都要打开。
硬件要求
Epic建议,两个32人的专用服务器在一台服务器主机上需要一台17G的CPU。你至少需要128M内寸(最小级限了)。
最近改一些客户端的项目,测试的时候需要使用windows,因为是windows的客户软件,所以不得不使用windows, 原来总是在我的debian上安装vmware, 自从升级内核到2617后,发现怎么安装vmware都有问题, 就比较烦,原来看到过华华说过qemu,081的时候安装过一次,感觉不是太理想,尤其是sdl的屏幕造成鼠标拖动很慢, 去主战的forum里看了看,发现这个已经被patch掉了。
而且kqemu又到了pre9了。正好试一下。
说一下目的:
安装qemu和kqemu, 配好网络。实现virtual machine 和 host 能够互通,也就是不是使用默认的user模式。 而改使用tun/tap的模式。
这里有两个要求:
第一:内核要支持network filter 尤其要用到的是nat
第二:内核要支持tun/tap模块。
我的是debian,自己编译的内核,所以在编译的时候就已经弄好了,由于我从来不用官方的内核,所以我就不知道debian的管方内核是不是已经有了。
不过可以自己看一下。
iptables的支持是不用问的,一般都是内置的。
就是tun/tap设备的支持。 这一点,可以这样看一下:
modprobe tun, lsmod 看一下有没有tun 如果成功,就是支持的, 而且是被编译成了模块,如果没有,可以看一下:/dev/net/,看看是不是存在tun这样一个文件,如果存在就是内核内置的,没有编译成模块,另外, 如果编译成了模块,也要注意是否有这个文件存在。不在的话,得自己建了。
mknode /dev/net/tun, 一般现在的发行版都会在你modprobe tun时自动帮你弄好,所以不用担心这个。
好了。我们开工了。
从主站上下载回来qemu的源码:
tar zxvf qemu-082targz
cd qemu-082
gcc -v
这里看一下gcc的版本。
qemu目前只能用gcc3来编译。如果你的是gcc4,
就su - 一下,到root, 然后到/usr/bin/
看一下有没有gcc3
有的话,看看原来的gcc是链接还是一个文件。如果是一个文件,就备份一下,呆会恢复。 如果是链接就不用管它了。看它指向哪一个gcc, 记得呆会儿要恢复过来的。 链接的做法简单了: ln -s gcc-33 gcc
就这样的。 备份就更简单了。mv gcc gccbak
回到我们刚才的目录里。
运行:
/configure
make
make install
这样就装好了qmeu,
现在我们需要使用kqemu模块来加速了。
下载回来kqemu-130pre9targz
解开后。
tar zxvf kqemu-130pre9targz
然后进入到目录里。这个时候有两件事要注意:
1 需要有你现在所用的内核的内核头文件。
2 gcc的版本要和你的内核编译的gcc版本一致。一搬来说就是你刚才改过的哪个了。恢复回来就好了。
好了。
/configure && make && make install
就好了。
我们已经就装好了所有的软件。
但是有时候我们需要一些设置才能工作。
1 modprobe kqemu
2 看看/dev/kqemu 字符文件是否存在。
3 /dev/kqemu 文件的权限要是0666的。
做好这些后就可以开始安装你的虚拟机了,
安装好,我们再设置你的网络
退出你的root, 然后
cd ~ 进入你的home directory
mkdir qemu
cd qemu
qemu-img create win2kimg 2G
建立一个硬盘文件。然后我们就可以在这个上面安装win2000了。
可以使用iso文件, 也可以使用光盘。
我们这里使用光盘来安装。
qemu -hda win2kimg -cdrom /dev/cdrom -boot d -localtime -m 256 -win2k-hack
这样就可以开始安装2000了。解释一下这里的选项:
-hda 指定第一个硬盘。
-cdrom 指定你的cdrom 后面的文件可以是一个iso文件
-boot d 从光盘启动,如果从你的硬盘启动,就-boot c, -localtime使用本机的时间。 -m 就是设定内存的大小。默认是128, 注意可以设得大一点的内存,但是需要你的/dev/shm足够大。
-win2k-hack, 在安装2000的时候会有一个问题,它会提示你磁盘空间不够,加上这个参数就可以了。
好了。
安装完成了之后,就可以启动来看一把了。
启动如下:
qemu -hda win2kimg -boot c -localtime -m 256 这样就默认使用了kqemu
现在应该也可以上网了,但是注意虚拟机使用的是dhcp的方式来上网的。
而且不能ping通你的本机,我想这个可能是大多数人不想要的,所以下面我们来配置网络。 通过tun/tap, 有点象vmware里的host-only
要配置host-only(tun/tap)这样的网络,我们上面已经讲过了两个要求,现在我们来做更多的事:
1、 建立一个文件 /etc/qemu-ifup
内容很简单:
#!/bin/sh
sudo /sbin/ifconfig $1 19216801 netmask 2552552550
然后chmod a+x /etc/qemu-ifup
注意这里的19216801是你的tun/tap网卡的地址,一定要注意:不能和你的实际的网卡在同一个网段。 也就是如果tun/tap是192168200/24, 那么你的时间网卡就不能在这个网段。
然后写一个小的脚本:
userinit 这个是文件名:
文件内容如下:
#!/bin/bash
case "$1" in
start)
[ ! -e /dev/kqemu ] && mknod -m 666 /dev/kqemu c 250 0
echo 1024 > /proc/sys/dev/rtc/max-user-freq
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -t nat -A POSTROUTING -o eth0 -s 19216800/24 -j MASQUERADE
;;
stop)
;;
esac
然后:chmod a+x userinit
再:mv userinit /etc/initd/
再: update-rcd userinit start 25 2 3
要注意的是这个操作是在debian 下面的做法。
如果是在其他发行版:比如Fedora, 你可以直接写这样的script在你的/etc/rclocal文件里
[ ! -e /dev/kqemu ] && mknod -m 666 /dev/kqemu c 250 0
echo 1024 > /proc/sys/dev/rtc/max-user-freq
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -t nat -A POSTROUTING -o eth0 -s 19216800/24 -j MASQUERADE
编辑你的/etc/modules 加上: kqemu (如果你的tun被编译成了模块,也加上tun)
最后还有一点。大家一定注意到了一个问题: 就是qemu-ifup脚本哩使用了sodu, 所以如果想普通用户能用,那么就配一下sudoer
这个好配极了。 编辑:/etc/sudoers
你的用户名 ALL=(ALL):ALL NOPASSWD:ALL
这样就可以不用输入密码了。
现在我们可以开始启动你的虚拟机了。
要象这样启动:
qemu -hda win2kimg -boot c -localtime -m 256 -net nic,vlan=0 -net tap,vlan=0
如果嫌麻烦,
就干脆写一个一句话的脚本:
#!/bin/bash
qemu -hda win2kimg -boot c -localtime -m 256 -net nic,vlan=0 -net tap,vlan=0
存储为win2k, 加上x的权限,然后放置到/usr/bin, 或者是/usr/local/bin下
以后直接运行win2k, 就可以启动2000了。
同理也可以安装多个系统,写多个脚本启动。
这样比较的酷
使用阿里云搭建网站有多种方式,您可参照下表选择合适的建站方式。
自助建站步骤
步骤1、选择服务器
不同网站类型需要的ECS配置不同,请您确认网站规模与访问人数。一般情况下,小型网站只需要选择基础配置即可。
步骤2、部署网站
步骤3、购买和备案域名
步骤4、解析域名
至此,自助建站操作已完成,接下来您可使用域名测试访问是否正常。
看到这么多回答,也讲的比较细致了。我再来个相对比较简单好用的一键部署WordPress搭建流程。
关于怎么购买阿里云服务器以及域名这里就不写了。可以先去阿里云官网领取代金券,然后再买,划算些。
下面写写拥有云服务器和域名后,如何开始搭建一个WordPress博客网站:
用阿里云服务器搭建一个WordPress网站主要有以下几种方式:
第一种,在购买的时候镜像选择“镜像市场”里面的linux+wordpress版本,也就是已经提前安装了特定环境的版本。登陆云服务器后,就可以直接开始安装配置WordPress了。
第二种,镜像选择“公共镜像”里的linux系统(比如centos7),然后手动配置好服务器环境,再安装WordPress。
第三种,也是最简单,比较推荐新手使用的一种,就是选择“公共镜像”里的linux系统后,云服务器里什么都不要安装,使用纯净的系统,一键安装宝塔面板,然后登陆宝塔面板,可视化操作,一键部署环境和安装WordPress。
下面详细讲讲第三种方法:
在购买云服务器时,地域选择国内是需要备案的,选择中国香港或者海外服务器是不需要备案的。
云服务器内存建议在4G或者以上(避免卡顿的情况),操作系统建议选择CentOS7版本,如下图
下面说说用阿里云服务器建立个人网站(以WordPress为例)的具体流程:
搭建之前,请先将你的域名解析到云服务器公网ip,新手可以选择“快速添加网站解析”,如下图:
1购买好云服务器后,登陆到你的控制台,找到你购买的“云服务器”,登陆进去。
2这时候应该打开了云服务器的命令行终端(阿里云或腾讯云登陆后都是一样的),我们只需把下面一行代码输入,然后按回车键即可。
yum install -y wget && wget -O installsh http://downloadbtcn/install/install_60sh && sh installsh
3 我们耐心等待一会儿,等宝塔面板自动安装完成(中间若出现是否安装Y/N?时,我们只需要输入y就行了)。
安装完成后,我们接着再命令行输入bt,这个时候就会显示面板的使用帮助菜单选项。
bt
4 这时候我们输入数字14,就能看到宝塔面板的登录地址还有用户名和密码。
5我们把登录地址复制到浏览器打开,输入用户名和密码,进入到宝塔面板的后台管理页面。一般来说, 首次登陆进来面板后,会自动推荐你安装环境套件,这里有两种选择,第一种是LNMP套件,第二种是LAMP套件 。如图(建议选择一键安装LNMP)
6为安全起见,建议修改你的用户名和密码,以及面板默认端口。
注意:修改面板端口之前,记得在你的阿里云或者腾讯云控制台,找到你的云服务器,在“安全组”一栏下修改规则,选择入站规则下的“添加规则”。
关于其他的安全设置,我们下一篇文章再讲,这里就先设置到这里。
7下面我们开始来一键部署WordPress建站程序,(提示:如果前面你没有安装LNMP环境或者LAMP环境,也不要着急,我们可以在软件搜索步骤5列出的几个套件手动安装),点击面板左侧“软件商店”,然后找到WordPress,选择一键部署。
8输入你的网站信息,即你的域名。另外,为了避免出现不可知的错误,新手建议不要修改默认创建的数据库名和命令,自己把它存储好就行。(当点击提交后,系统会自动列出数据库名和密码以及网站地址,请保存好这些信息,后面进入WordPress安装需要填写)
9在线安装WordPress网站程序的时候,先选择语言“简体中文”,然后填写数据库名和密码(就是上一步叫你保存的)
10 中间几步省略了,安装步骤填写就行。安装完成后,登陆你的Wordpress管理后台。(后台登陆地址为:你的网址或ip/wp-admin)
11到这里,你的WordPress网站就搭建成了。接着你可以去发布文章或更换主题,以及后期的维护等等,这里就不细说了。
12最后,如何在宝塔面板管理添加站点呢。点击左侧“网站”,选择右边的“添加站点”。接着在弹出的窗口里,填写好你的新站点信息即可。(如果只是部署静态网站的话,就不需要创建数据库)
13然后访问你的网站地址就会显示创建成功!
14接着你可以将你的静态网站源码上传到你的网站目录里,也可以手动部署WordPress网站(需要在上一步里创建数据库)。
15当然,如果你要做的是Wordpress网站,那么建议你先不要添加站点(即省略以上添加站点的步骤),直接在面板左侧“软件商店”选择一键
部署WordPress即可(这时会帮你自己创建数据库,或者手动更改也行),同时也会自动创建站点,部署WordPress成功后,回到你的“网站”目录里就可以看到自己的站点了。
0条评论