ace centos,centos官网
大家好,今天给各位分享ace centos的一些知识,其中也会对centos官网进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!
在CentOS系统上搭建PPTPVPN的教程
1.先检查vps是否满足配置pptp vpn的环境。因为有的openvz的vps被母鸡给禁用了。其实,你在配置前最好向vps的客服发TK,可能客服会帮你开通vpn或者客服那里会给你他们自己定制的vpn一键安装包也有可能。
2.接着是安装配置pptp vpn的相关软件,安装ppp和iptables。
配置安装好后的pptp软件,这个不像windows那样,安装的过程就是配置的过程。linux的要安装完之后,修改配置文件,才算是完成配置。
3.启动pptp vpn服务。此时,就是检验你能够vpn拨号成功,如果你拨号成功了,说明你的pptp vpn的安装配置就算真正的完成了。但是此时只能登录vpn,却不能用来上网。
4.开启内核和iptables的转发功能。这个步骤是为了让你连上vpn之后,能够上网,上那些yourporn,youtube之类的。这步是最关键的,很多人能成功拨号,登录vpn,但是却不能上网就是因为这个步骤没做好。这步骤完成了,你就可以尽情去国外的网站访问了。
第一步:检测是否符合pptp的搭建环境的要求
服务器版本:CentOs 6.4 xen vps
这里说一下,如果你的linux内核版本等于或高于 2.6.15,内核集成了MPPE。可以用下面命令进行测试内核是否支持
复制代码代码如下:#modprobe ppp-compress-18&& echo ok
返回“ok”说明测试通过。但是返回报错“FATAL: Module ppp_mppe not found.”,也不能说不支持,因为modprobe命令是去/lib/modules/`uname-r`找模块,但是很多时候,这个目录下是空的。所以这个命令没什么太大用处。
于是有人又提出一个命令,通过查看内核编译的配置文件config.gz:
复制代码代码如下:#zgrep MPPE/proc/config.gz
返回CONFIG_PPP_MPPE=y或=m说明内核已经编译了MPPE,通过测试。但是呢,这个命令其实也没什么用,因为有的vps空间商会不会备份config.gz文件。所以,config.gz文件都没有,这命令也是废了。
所以,最后建议直接使用下面的指令:
复制代码代码如下:#cat/dev/net/tun
如果这条指令显示结果为下面的文本,则表明通过:
cat:/dev/net/tun: File descriptor in bad state
上述任意一个命令测试通过,就能安装pptp。否则就只能考虑openvpn。
确认自己的vps能够支持pptp vpn或其他类型的vpn。最好的方法是直接问vps空间商,因为没有人比他们更清楚了。没准人家还会提供vpn一键安装包呢!!!
有部分的vps需要发tk,让vps空间商的技术客服为你的VPS打开TUN/TAP/PPP功能了,而有部分vps控制面板上提供打开TUN/TAP/PPP功能的按钮,自己就能手动开启。
Centos 6.4内核版本在2.6.15以上,都默认集成了MPPE和PPP,因此下面检查可以忽略:
复制代码代码如下:#rpm-q ppp//查询当前系统的ppp是否默认集成了,以及ppp的版本
检查PPP是否支持MPPE
用以下命令检查PPP是否支持MPPE:
复制代码代码如下:#strings'/usr/sbin/pppd'|grep-i mppe| wc--lines
如果以上命令输出为“0”则表示不支持;输出为“30”或更大的数字就表示支持,MPPE(Microsoft Point to Point Encryption,微软点对点加密)。
第二步:
1.安装ppp和iptables
PPTPD要求Linux内核支持mppe,一般来说CentOS安装时已经包含了
复制代码代码如下:#yum install-y perl ppp iptables//centos默认安装了iptables和ppp
2.安装pptpd
刚才用了yum安装了ppp,但是这里有个问题,几乎大部分的人都会在这里遇到ppp和pptpd不兼容的错误。因为yum安装ppp,总是安装最新版本的ppp,而由于安装的ppp的版本不同,那么就需要安装对应版本的pptpd才行。(参考我的文章《ppp= 2.4.4 is needed by pptpd-1.3.4-2.rhel5.x86_64的解决办法及原因|大步's blog》)
我们要先查看已经安装的ppp的版本,在去找对应的pptpd版本。我手头刚好有两个vps,一个是前年装的pptp vpn,一个是一年后装的pptp vpn,所以,装的yum install ppp的版本不同。
使用下面的命令查看ppp的版本,前提你是yum安装的ppp。
旧的vps上的ppp版本显示:
复制代码代码如下:#yum list installed ppp
显示:
复制代码代码如下:ppp.i386 2.4.4-2.el5 installed
新的vps上的ppp版本显示;
复制代码代码如下:#yum list installed ppp
显示:
复制代码代码如下:ppp.i686 2.4.5-5.el6@base
所以,要对根据ppp版本选择对应的pptpd版本。这里我主要列出常用的。
复制代码代码如下:ppp 2.4.4——————>pptpd 1.3.4
ppp 2.4.5——————>pptpd 1.4.0
贴个ppp和pptpd各个版本的下载地址;
大家下载的时候注意,分清楚你系统的版本是64位的还是32位的。我个人建议ppp用yum安装,pptpd用rpm的安装,因为如果全都rpm或者源码安装,依赖关系很是烦人。文件名含有数字64的就是64位版本,没有的就是32位版本。可以用下面的命令查看自己的系统是32位还是64位的。
复制代码代码如下:#getconf LONG_BIT
下面假设我这里的ppp是2.4.4版本,然后安装pptpd
第一种安装pptpd的方法是直接用yum安装,让电脑自动选择对应的版本:
先加入yum源:
复制代码代码如下:#rpm-Uvh
然后用yum安装pptpd:
复制代码代码如下:#yum install pptpd
这是最省时间和力气的。余下的和手动安装没什么区别了。
第二种是手动安装pptpd包:
对于32位CentOS,执行
复制代码代码如下:wget
rpm-ivh pptpd-1.3.4-1.rhel5.1.i386.rpm
对于64位CentOS,执行
复制代码代码如下:wget
rpm-ivh pptpd-1.3.4-1.rhel5.1.x86_64.rpm
这里贴上32位的pptpd的rpm的下载地址:
64位安装的时候如果出现:
复制代码代码如下:warning: pptpd-1.3.4-2.rhel5.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 862acc42: NOKEY
error: Failed dependencies:
ppp= 2.4.4 is needed by pptpd-1.3.4-2.rhel5.x86_64
原因是pptpd与PPP不兼容,那么,此时用#yum list installed ppp命令查看ppp版本,极有可能ppp是2.4.5版本的。所以,我们要下载pptp 1.4.0版本才行,而且这里是64位的系统。下载pptpd-1.4.0-1.el6.x86_64.rpm安装即可。这就是我说的出现版本不兼容的问题,当ppp版本和pptpd版本不兼容时候,就会出现类似的错误。
这里我分享下pptpd下载地址;
64位pptpd-1.4.0-1.el6.x86_64.rpm的下载地址:
32位pptpd-1.4.0-1.el6.i686.rpm版本下载地址:
看到有人建议用--nodeps--force这个参数,我个人不建议,这个参数可能以后会出现奇怪的问题,但是如果实在不行,你就用吧
第三步:修改配置文件
1.配置文件/etc/ppp/options.pptpd
复制代码代码如下:#cp/etc/ppp/options.pptpd/etc/ppp/options.pptpd.bak
#vi/etc/ppp/options.pptpd
解析:我还建议是在原配置文件上添加内容来配置pptp,省的不必要的麻烦和问题
将如下内容添加到到options.pptpd中:
复制代码代码如下:ms-dns 8.8.8.8
ms-dns 8.8.4.4
然后保存这个文件。
解析:ms-dns 8.8.8.8, ms-dns 8.8.4.4是使用google的dns服务器。
2.配置文件/etc/ppp/chap-secrets
复制代码代码如下:#cp/etc/ppp/chap-secrets/etc/ppp/chap-secrets.bak
#vi/etc/ppp/chap-secrets
chap-secrets内容如下:
复制代码代码如下:# Secrets for authentication using CHAP
# client server secret IP addresses
myusername pptpd mypassword*
//myusername是你的vpn帐号,mypassword是你的vpn的密码,*表示对任何ip,记得不要丢了这个星号。我这里根据这个格式,假设我的vpn的帐号是ksharpdabu,密码是 sky。那么,应该如下:
复制代码代码如下:ksharpdabu pptpd sky*
3.配置文件/etc/pptpd.conf
复制代码代码如下:#cp/etc/pptpd.conf/etc/pptpd.conf.bak
#vi/etc/pptpd.conf
添加下面两行:
复制代码代码如下:localip 192.168.9.1
remoteip 192.168.9.11-30//表示vpn客户端获得ip的范围
关键点:pptpd.conf这个配置文件必须保证最后是以空行结尾才行,否则会导致启动pptpd服务时,出现“Starting pptpd:”,一直卡着不动的问题,无法启动服务,切记呀!(相关文档可以查看:Starting pptpd:运行不下去的原因)
复制代码代码如下:ppp= 2.4.4 is needed by pptpd-1.3.4-2.rhel5.x86_64
4.配置文件/etc/sysctl.conf
复制代码代码如下:#vi/etc/sysctl.conf//修改内核设置,使其支持转发
将net.ipv4.ip_forward= 0改成 net.ipv4.ip_forward= 1
保存修改后的文件
复制代码代码如下:#/sbin/sysctl-p
第四步:启动pptp vpn服务和iptables
复制代码代码如下:#/sbin/service pptpd start或者#service pptpd start
经过前面步骤,我们的VPN已经可以拨号登录了,但是还不能访问任何网页。最后一步就是添加iptables转发规则了,输入下面的指令:
启动iptables和nat转发功能,很关键的呀:
复制代码代码如下:#/sbin/service iptables start//启动iptables
#/sbin/iptables-t nat-A POSTROUTING-o eth0-s 192.168.9.0/24-j MASQUERADE或者使用下面的一种:
#iptables-t nat-A POSTROUTING-o eth0-s 192.168.9.0/24-j SNAT--to-source 207.210.83.140
//注意:命令中的"-o eth0"是指定网卡名称,如果是多个网卡,就根据需要将-o eth0改成你-o ethXX(ehtXX是你网卡的名称),可以通过ifconfig查看有哪那些连通外网的网卡,一般vps都是单网卡的,而且大都网卡默认名都叫eth0。但是事情总是多样的,所以如果你的上网的网卡不是叫 eth0,那么就必须去掉-o eth0。直接让系统判断你用的网卡,所以将上面的命令改成:
复制代码代码如下:iptables-t nat-A POSTROUTING-s 192.168.9.0/24-j SNAT--to-source 207.210.83.140
//你需要将207.210.83.140替换成你的vps的公网ip地址,因为这里我写的是我的。还有就是有人说我这--to-source前只有一个横杠,其实是有两个横杠的。文章在编辑模式下显示是两个横杠,因为用的是英文输入法,所以,发表后就变成了一个横杆,而且在源码下复制粘贴也是一横,只有在编辑模式下才能看清楚是两横。但是可以明显看到to前面的那一横比source前的那横长一些,这些都是我操作记录下的命令,不会有错的。为了防止你们出错,我还是用不同的颜色标记吧。
这里我先前写的不是很详细,现在补上:
需要注意的是,这个指令中的“192.168.9.0/24”是根据之前的配置文件中的“localip”网段来改变的(网上有的教程是192.168.0.0/24),比如你设置的“10.0.0.1”网段,则应该改为“10.0.0.0/24”。此外还有一点需要注意的是eth0,如果你的外网网卡不是eth0,而是eth1(比如SoftLayer的服务器就是这样的情况),那么请记得将eth0也更改为对应的网卡编号,不然是上不了网的!
如果你的linux vps是ppp或者ADSL这种由DHCP动态分配获取ip的方式(当然vps的ip基本都是是固定的。如果你是XEN的vps,那么这个转发规则其实也是适用的,就是让vps自己判断自己的ip,省去了我们指定。),那么就需要用-j MASQUERADE这种写法,就是ip伪装。当然如果使用iptables-t nat-A POSTROUTING-o eth0-s 192.168.9.0/24-j SNAT--to-source XXX.XXX.XXX.XXX这种转发规则其实也是可以的,这样亲自指定自己的vps的ip地址。以后你通过vpn访问网站,显示的就是这个ip了。
复制代码代码如下:#/etc/init.d/iptables save//保存iptables的转发规则
#/sbin/service iptables restart//重新启动iptables
最后一步:重启pptp vpn
复制代码代码如下:#service pptpd restart
linux shell 脚本实现tcp/upd协议通讯
linux设备里面有个比较特殊的文件:
/dev/[tcp|upd]/host/port只要读取或者写入这个文件,相当于系统会尝试连接:host这台机器,对应port端口。如果主机以及端口存在,就建立一个socket连接。将在,/proc/self/fd目录下面,有对应的文件出现。
一、测试下:/dev/tcp/host/post文件
复制代码
代码如下:
[chengmo@centos5 shell]$ cat/dev/tcp/127.0.0.1/22
SSH-2.0-OpenSSH_5.1
#我的机器shell端口是:22
#实际:/dev/tcp根本没有这个目录,这是属于特殊设备
[chengmo@centos5 shell]$ cat/dev/tcp/127.0.0.1/223
-bash: connect:拒绝连接
-bash:/dev/tcp/127.0.0.1/223:拒绝连接
#223接口不存在,打开失败
[chengmo@centos5 shell]$ exec 8/dev/tcp/127.0.0.1/22
[chengmo@centos5 shell]$ ls-l/proc/self/fd/
总计 0
lrwx------ 1 chengmo chengmo 64 10-21 23:05 0-/dev/pts/0
lrwx------ 1 chengmo chengmo 64 10-21 23:05 1-/dev/pts/0
lrwx------ 1 chengmo chengmo 64 10-21 23:05 2-/dev/pts/0
lr-x------ 1 chengmo chengmo 64 10-21 23:05 3-/proc/22185/fd
lrwx------ 1 chengmo chengmo 64 10-21 23:05 8- socket:[15067661]
#文件描述符8,已经打开一个socket通讯通道,这个是一个可以读写socket通道,因为用:""打开
[chengmo@centos5 shell]$ exec 8-
#关闭通道
[chengmo@centos5 shell]$ ls-l/proc/self/fd/
总计 0
lrwx------ 1 chengmo chengmo 64 10-21 23:08 0-/dev/pts/0
lrwx------ 1 chengmo chengmo 64 10-21 23:08 1-/dev/pts/0
lrwx------ 1 chengmo chengmo 64 10-21 23:08 2-/dev/pts/0
lr-x------ 1 chengmo chengmo 64 10-21 23:08 3-/proc/22234/fd
二、通过重定向读取远程web服务器头信息
复制代码
代码如下:
#!/bin/sh
#testhttphead.sh
#实现通过主机名,端口读取web服务器header信息
#copyright chengmo,qq:8292669
if(($#2));then
echo"usage:$0 host port";
exit 1;
fi
#如果参数缺失,退出程序,返回状态1
exec 6/dev/tcp/$1/$2 2/dev/null;
#打开host的port可读写的socket连接,与文件描述符6连接
if(($?!=0));then
echo"open$1$2 error!";
exit 1;
fi
#如果打开失败,$?返回不为0,终止程序
echo-e"HEAD/ HTTP/1.1/n/n/n/n/n"6;
#将HEAD信息,发送给socket连接
cat6;
#从socket读取返回信息,显示为标准输出
exec 6-;
exec 6-;
#关闭socket的输入,输出
exit 0;
脚本建立后:存为testhttphead.sh
运行结果:
复制代码
代码如下:
[chengmo@centos5~/shell]$ sh testhttphead.sh www.baidu.com 80
HTTP/1.1 200 OK
Date: Thu, 21 Oct 2010 15:17:23 GMT
Server: BWS/1.0
Content-Length: 6218
Content-Type: text/html;charset=gb2312
Cache-Control: private
Expires: Thu, 21 Oct 2010 15:17:23 GMT
Set-Cookie: BAIDUID=1C40B2F8C676180FD887379A6E286DC1:FG=1; expires=Thu, 21-Oct-40 15:17:23 GMT; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM"
Connection: Keep-Alive
[chengmo@centos5~/shell]$ sh testhttphead.sh 127.0.0.1 8080
open 127.0.0.1 8080 error!
突然有个奇怪想法:
我们在windows时代就通过telnet可以实现tcp/upd协议通讯,那么如果用传统方法怎么实现呢?
复制代码
代码如下:
[chengmo@centos5~/shell]$ echo-e"HEAD/ HTTP/1.1/n/n/n/n/n"|telnet www.baidu.com 80
Trying 220.181.6.175...
Connected to www.baidu.com.
Escape character is'^]'.
Connection closed by foreign host.
#直接给发送,失败
[chengmo@centos5~/shell]$(telnet www.baidu.com 80)EOF
HEAD/ HTTP/1.1
EOF
Trying 220.181.6.175...
Connected to www.baidu.com.
Escape character is'^]'.
Connection closed by foreign host.
#重定向输入,还是失败?
找到正确方法:
复制代码
代码如下:
[chengmo@centos5 shell]$(echo-e"HEAD/ HTTP/1.1/n/n/n/n/n";sleep 2)|telnet www.baidu.com 80
Trying 220.181.6.175...
Connected to www.baidu.com.
Escape character is'^]'.
HTTP/1.1 200 OK
Date: Thu, 21 Oct 2010 15:51:58 GMT
Server: BWS/1.0
Content-Length: 6218
Content-Type: text/html;charset=gb2312
Cache-Control: private
Expires: Thu, 21 Oct 2010 15:51:58 GMT
Set-Cookie: BAIDUID=0B6A01ACECD5353E4247E088A8CB345A:FG=1; expires=Thu, 21-Oct-40 15:51:58 GMT; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM"
Connection: Keep-Alive
#成功了!加入sleep居然可以了,sleep改成1秒也可以
是不是由于sleep后,echo会推出2秒发给通道:telnet呢?推论可以从这2个方面推翻:
一个方面:通过()括的数据是一对命令,会作为一个子命令执行,一起执行完程序结束。每个命令echo语句,就直接发送到屏幕(也就是标准输出),只要有标准输出了,就会通过通道马上传个:telnet,如果接下来命令还有输出,会注意传给telnet,直到()内所有命令执行完,与通道连接就断开了。
再一个方面:如果说是起到推迟发送的话,什么时候有数据过来,发给telnet,什么时候telnet命令启动。跟你推迟一点还是早一点发送过来。没有关系。
这种类型命令,看出sleep,其实就是保持通道跟telnet连接2秒钟。通道连接着了,telnet终端输入也还在,因此可以保持从baidu服务器获得数据。
所以,延迟多久,还是跟服务器处理速度有关系。
如果通过echo向telnet发送数据,保持通道联通,使用sleep是个很好方法。
通过重定向给telnet输入参数这种方法,我还想不到怎么样实现延迟输入。有知道朋友,可以指点指点.
区别:
telnet与echo实现 http访问,与通过打开读写socket是不一样的,打开socket通道,是可以进行交换处理的。传入命令,活动结果,再传入命令,再获得结果。telnet通过echo就不能这样处理了。
三、通过shell脚本重定向实现监控memcache状态
复制代码
代码如下:
#!/bin/sh
#通过传入ip以及端口,发送指令获得返回数据
#copyright chengmo qq:8292669
#函数往往放到最上面
function sendmsg()
{
msg=$1;
echo"$1"8;
getout;
}
#向socket通道发送指令,并且调用获得返回参数
function getout()
{
#read命令-u从打开文件描述符 8读取数据,-d读取数据忽略掉:/r换行符
while read-u 8-d$'/r' name;
do
if ["${name}"=="END"-o"${name}"=="ERROR" ];then
break;
fi;
echo$name;
done
}
#由于:memcached每次通讯完毕,会返回:END或者ERROR(出错),通过判断是否是"END"觉得读取是不是结束,否则循环不会停止
if [$#-lt 2 ];then
echo"usage:$0 host port [command]";
exit 1;
fi;
[[$#-gt 2 ]]command=$3;
#设置默认值如果command为定义则为:stats
command="${command=stats}";
host="$1";
port="$2";
exec 8/dev/tcp/${host}/${port};
#打开通向通道是8
if ["$?"!="0" ];then
echo"open$host$port fail!";
exit 1;
fi
sendmsg"$command";
#发送指定命令
sendmsg"quit";
#发送退出通向命令
exec 8-;
exec 8-;
#关闭socket通道
exit 0;
这是通过重定向,实现socket通讯中,发送然后获取返回的例子。其实,上面代码看似一次只能发送一段。时间上。我们可以反复调用:sendmsg,捕捉输出数据。实现连续的,读与写操作。
实例截图:
其它实现方法:
其实通过:telnet也可以实现的。
[chengmo@centos5 shell]$(echo"stats";sleep 2)|telnet 127.0.0.1 11211
通过nc命令实现:
[chengmo@centos5 shell]$(echo"stats")|nc 127.0.0.1 11211
不需要加延迟,直接打开通道
第二个程序里面,看到shell完全可以处理交互设计了。如果按照这样,登陆ftp,pop3,stmp都可以类似实现。这些,我们通过shell socket类似程序实现,应该不困难,只是捕捉如发送解析的问题了。
什么是“CentOS”
CentOS,全称为"Community ENTerprise Operating System"的缩写,中文直译为“社区企业操作系统”。这是一个专为企业和社区用户设计的开源操作系统,其英文缩写在软件开发和信息技术领域中有着广泛应用。该系统主要由Apache web服务器、PHP编程语言、MySQL数据库、ACE编程框架以及Red Hat Enterprise操作系统等多个开源项目组成。
CentOS的中文拼音为“shè qū qǐ yè cāo zuò xì tǒng”,在英语中的流行度反映了其在开源技术中的重要地位。作为一款基于开源社区的系统,它主要用于企业环境,如网站开发、服务器管理、大数据处理等领域。例如,许多企业会使用CentOS作为基础架构,以降低成本,同时利用开源社区的持续支持和更新。
尽管CentOS起源于Red Hat Enterprise操作系统,但它是一个独立的分支,免费且无商业支持。它为学习者和开发者提供了实践平台,同时也是企业级应用的可靠选择。请注意,尽管CentOS信息丰富,但它主要用于教育和研究,任何实际使用时需自行评估和管理风险。