在Linode的Ubuntu上搭建L2TP over IPSec服务器

之前在Linode上部署的openVPN服务在我把instance迁移到东京之后就歇菜了。之后特地花了时间重新配置了一把,但是还是出现了连接没问题,仍然无法访问外网的问题(编者按,L2TP配置完之后触类旁通的基本可以肯定是路由问题,也有把握修复了,这是后话)。考虑到ipad只能支持L2TP,所以特地花了时间搞了一把,特地记录一下。
不得不说运气不错,找到一篇很赞的总结文在Linode上搭建L2TP / IPSec VPN,不仅总结了自己的问题,而且还提供了其他详细教程的链接,相当方便。


1)安装IPSec
没啥好说的,Ubuntu就是方便阿方便。

sudo apt-get install openswan

2) 配置IPSec Connection
修改/etc/ipsec.conf,注意把%YOUR.SERVER.IP.ADDRESS%替换成你的服务器地址。

version 2.0
config setup
nat_traversal=yes
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
oe=off
protostack=netkey
conn L2TP-PSK-NAT
rightsubnet=vhost:%priv
also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
authby=secret
pfs=no
auto=add
keyingtries=3
rekey=no
ikelifetime=8h
keylife=1h
type=transport
left=%YOUR.SERVER.IP.ADDRESS%
leftprotoport=17/1701
right=%any
rightprotoport=17/%any

3) 配置IPSec共享密钥
修改/etc/ipsec.secrets,注意把%YOUR.SERVER.IP.ADDRESS%替换成你的服务器地址。另外国外论坛也有提到第二种写法可以避免一些不必要的问题。

%YOUR.SERVER.IP.ADDRESS% %any: PSK “YourSharedSecret”

: PSK “YourSharedSecret”

4)修改包转发设置
执行下列命令

for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -p
ipsec verify #用来验证配置

最后重启一下ipsec服务器。

sudo /etc/init.d/ipsec restart

5)安装配置xl2tpd
再次赞叹ubuntu的方便。

sudo apt-get install xl2tpd

修改/etc/xl2tpd/xl2tpd.conf.

[global]
ipsec saref = yes
[lns default]
ip range = 10.1.2.2-10.1.2.255
local ip = 10.1.2.1
;require chap = yes
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

6)安装配置ppp

sudo apt-get install ppp

修改或者创建/etc/ppp/options.xl2tpd,注意我这里用的是Google的Public DNS。

[global]
ipsec saref = yes
[lns default]
require-mschap-v2
ms-dns 8.8.8.8
ms-dns 8.8.4.4
asyncmap 0
auth
crtscts
lock
hide-password
modem
debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4

添加VPN用户,修改/etc/ppp/chap-secrets

# user server password ip
xiuxiu l2tpd testpassword *

重启xl2tpd

sudo /etc/init.d/xl2tpd restart

7)设置 iptables 的数据包转发
执行下列程序。

iptables –table nat –append POSTROUTING –jump MASQUERADE



8)设置启动脚本
关于IP路由和转发的配置在服务器重启后会消失,所以需要在启动脚本中添加相关内容.修改/etc/rc.local

iptables –table nat –append POSTROUTING –jump MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done
/etc/init.d/ipsec restart



问题汇总
Ubuntu openswan errno 111, origin ICMP type 3 code 3 (not authenticated)
这是我自己遇到的问题,郁闷了半天,结果是最新的openswan for ubuntu有bug,与最新的Linux Kernel有冲突。去openswan的官网下载较老的版本openswan_2.6.32-1xelerance1_i386.deb就可以了。


ERROR: asynchronous network error report on eth0 (sport=4500) for message to your.client.ip.address port 4500, complainant your.server,ip.address: No route to host [errno 113, origin ICMP type 3 code 1 (not authenticated)]
在 ipsec.conf 中加上 leftnexthop=your.server.gateway.ip 应该可以解决。


The remote system is required to authenticate itself
pppd[4407]: but I couldn’t find any suitable secret (password) for it to use to do so.

这是由于验证过程中未使用 l2tp-secrets 中的密码(至于为何如此我不懂,另请高人解释),而是使用 pptp(L2TP/IPsec 也是要走 pptp 的)的密码,所以需要在 /etc/ppp/chap-secrets 中设置密码(具体请见上面如何搭建 PPTP VPN)。


xl2tpd[4062]: Maximum retries exceeded for tunnel 44651. Closing.
在/etc/ipsec.conf里的L2TP-PSK-noNAT中加上
dpddelay=40
dpdtimeout=130
dpdaction=clear

参考链接
Using Linux as an L2TP/IPsec VPN client
openswan_2.6.32-1xelerance1_i386.deb

如何在 Debian / Ubuntu 服务器上架设 L2TP / IPSec VPN
Linode CentOS / Debian 部署 ipsec+l2tpd 简要笔记
Guide: Openswan, XL2TP and PPP on Ubuntu Maverick for iPhone VPN Connection
联通连不通─VPN
linux l2tp vpn install


推荐链接
有兴趣的朋友可以使用我的referral链接注册使用Linode。
http://www.linode.com/?r=513a31440dd0a6c0980cc05a164b4ae2520a19d6

 

Linode一次简单的运维经历

2012年3月1日下午2点,有用户报告说安装的Wordpress坏了,用身边的Ipad尝试链接,Database Error。
用ipad的ssh客户端登录服务器作初步检查。
1)ps -ef | grep mysql
显示没有正在运行的mysql实例对象。
2)service mysql start
mysql: Job failed to Start
显示mysql运行失败
3)cat /var/run/log/mysql/error
没有数据,google之后可能是日志文件权限不够,不过查看之后发现没有问题。问题暂时搞不定。

2012年3月1日晚上8点,回到家用电脑开始登陆服务器尝试修复。
1)cat /var/log/daemon.log
Mar 1 21:09:53 xiuxiu init: mysql pre-start process (4597) terminated with status 1
死办法通过时间找到日志文件daemon.log,查看内容发现如下错误信息。google之后发现Linode论坛就有人讨论这个问题(大赞linode),是服务器硬盘不够引起的。
2)mysql> use information_schema
Database changed

mysql> select concat(round(sum(index_LENGTH)/(1024*1024),2),’MB’) as ‘Index Size’ from tables where table_schema=’bbs’;
首先想到的是数据库可能太大了,google了查看数据库大小的方法,发现所有数据库没有容量太大的问题。
3)du -h –max-depth=1 /
Google了Linux查看文件夹大小的命令,但是还是不熟悉LInux的文件结构,只好从根目录开始查看,最后定位到了/var/mail/root,最后发现是自己的一个app给系统发送了过多的mail导致。删除本地mail,系统恢复正常。

没有特别的含义,记录一下linux操作以及大致的诊断问题的方法。

参考链接

mysql查看数据库大小,索引大小

Linux下查看文件和文件夹大小的df和du命令

 

在Linode上安装openVPN

一些朋友需要VPN访问一些墙外资源。本着服务器放着不用是浪费的原则我决定搭一个VPN服务器帮助解决朋友的需求。
不得不说Linode的文档非常齐全,而且很傻瓜,照着作一遍基本解决了所有的问题。

openVPN安装

Ubuntu方便是没话说的。

apt-get update
apt-get upgrade --show-upgraded
apt-get install openvpn udev

这就是所有你需要的软件了。安装包里提供了密钥工具包“easy-rsa”,把它拷贝到配置文件夹下。

cp -R /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn

修改工具包中的文件vars,按照你的需要配置相关信息

export KEY_COUNTRY="US"
export KEY_PROVINCE="OH"
export KEY_CITY="Oxford"
export KEY_ORG="Ducklington"
export KEY_EMAIL="squire@ducklington.org"

配置你的密钥体系

首先需要初始化PKI.

cd /etc/openvpn/easy-rsa/2.0/
source . /etc/openvpn/easy-rsa/2.0/vars
. /etc/openvpn/easy-rsa/2.0/clean-all
. /etc/openvpn/easy-rsa/2.0/build-ca

接着生成服务器私钥。会有一些问题和提示,选择默认和Y就可以了。

. /etc/openvpn/easy-rsa/2.0/build-key-server server

然后是生成客户端的证书.其中client1是证书的名字,你可以按照你的需要填写。如果需要生成多个客户端证书,重复该步骤就可以了。

. /etc/openvpn/easy-rsa/2.0/build-key client1

最后生成Diffie Hellman Parameters。

. /etc/openvpn/easy-rsa/2.0/build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time

如果一切正常,会出现如上所示的信息。
密钥的配置基本就是这样,最后把生成的密钥文件和easy-rsa提供的服务器端配置文件样本拷贝到配置文件夹下。

cd /etc/openvpn/easy-rsa/2.0/keys
cp ca.crt ca.key dh1024.pem server.crt server.key /etc/openvpn

cd /usr/share/doc/openvpn/examples/sample-config-files
gunzip -d server.conf.gz
cp server.conf /etc/openvpn/
cp client.conf ~/
cd ~/

配置openVPN链接

密钥的配置保证了客户端和VPN服务器的链接。还要配置openVPN对网络包地转发规则。
修改/etc/openvpn/server.conf,添加如下语句

push "redirect-gateway def1"

修改/etc/sysctl.conf,添加如下语句

net.ipv4.ip_forward=1

为VPN会话添加下列变量。

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

为了保证每次启动这边规则都生效,可以把后面四个语句添加到/etc/rc.local中去。
除了IP包地转发规则,我们还需要处理来自客户端的dns请求,安装dnsmasq来解决这个问题。

apt-get update
apt-get install dnsmasq

修改/etc/openvpn/server.conf,添加如下语句

push "dhcp-option DNS 10.8.0.1"

OK,一切搞定,启动openVPN服务吧。

/etc/init.d/openvpn restart

客户端的使用

Mac下的openVPN客户端
http://code.google.com/p/tunnelblick/
Windows下的openVPN客户端
http://openvpn.se/download.html
将上文生成的client.conf, ca.crt, client1.key, client1.crt拷贝到你的电脑,配合客户端使用即可。

参考连接

http://library.linode.com/networking/openvpn/ubuntu-10.04-lucid

推荐连接

有兴趣的朋友可以使用我的referral链接注册使用Linode,将获得10%的优惠。
http://www.linode.com/?r=513a31440dd0a6c0980cc05a164b4ae2520a19d6

 

Ubuntu升级到10.04 LTS之后一堆问题

Tags: ,

昨晚看到了Ubuntu 10.04 LTS发布的消息,激动万分。冲着LTS的面子怎么也要试试看。于是热血沸腾的一口气把我的9.04经过9.10直接升级到了10.04.
早上起来一看,问题一大堆,差点崩溃了。然后google一遍,发现基本都是已经开始热烈讨论的问题了,不过都没有补丁出来。Anyway,记录下来等着Ubuntu发更新吧。
1)显示器工作异常
本来9.04工作的好好的显示器,现在死活点不亮。目前只能通过SSH和VNC4SERVER登录。

2)键盘工作异常
其他按钮都工作正常,可是按”S”键回呼出系统菜单,按”M”键会呼出消息菜单。VNC4SERVER侠都是这样,SSH工作良好。(我觉得这是一个工程师的玩笑。。。)
[05/10/2010] dist-upgrade之后系统恢复正常。

3)代理工作异常
在~/.bashrc下设置的http_proxy不工作,无法进行apt-get操作。
[解决办法]看网上的解决办法是执行”sudo -E apt-get …”.确实有效,但是无法使用GUI相关功能。
http://ubuntuforums.org/showthread.php?t=1466944

4)看不到Network Manager信息
网络明明通的。可是通过Network Manager无法察看eth0的信息。

哎哎,作为TLS版本还是任重道远啊。

 

强烈推荐 Swiftweasel: Firefox PGO 优化版

今天碰巧在twitter上看到@linuxtoy关于Switftweasel的推荐Swiftweasel: Firefox PGO 优化版.


它不只把 PGO(即“Profile Guided Optimization”)优化带到了 Linux 平台,而且还加入了其他一些额外的优化,如使用 -O3 选项编译、默认开启 HTTP pipelining 等。经过优化后的 Swiftweasel,速度更快。另外,Swiftweasel 还预装了 AdBlock Plus、XForms、User Agent Switcher、Quick Locale Switcher 等实用扩展。


家里的台式机放在书房,糟糕的无线网卡性能让我对每一次VNC操作都珍惜非常-,-(同时大大的促进了我对bash的学习).
说起来这台Ubuntu 8.10,除了给我捣鼓各种各样的Server之外,最多的VNC操作就是Firefox找bt种子了//blush,也不需要额外安装什么Plugins.所以看到这篇文章想都没想马上投奔了过去.

Swiftweasel的主页:http://swiftweasel.tuxfamily.org/
Swiftweasel的下载地址:http://sourceforge.net/project/showfiles.php?group_id=195473

Swiftweasel支持各种平台,以及Firefox的各种版本(包括2.0.x,3.0.x).可惜现成的deb包貌似只有到3.0.3的支持,没办法偷懒了….-,-.Anyway,安装还是超级方便的.

下载Swiftweasel的压缩包,解压以后放到/usr/local/下,然后写一个desktop就可以了.
[Desktop Entry]
Name=Swiftweasel
Comment=Swiftfox 3.0.10
Exec=/usr/local/swiftweasel/firefox
Terminal=false
Type=Application
Icon=/usr/local/swiftweasel/icons/mozicon50.xpm
Categories=Application;Network;

尝试了一下,确实速度快了很多.ohyeah~

 

Ubuntu下的LDAP的搭建与Spring LDAP编程

最近要装LDAP.
不得不感叹wiki.ubuntu.org.cn真是非常的强大,要啥有啥。
按照上面的步骤,OpenLDAP Server就很快搭好了,
自动搜索到了我的本地域名,
设置admin密码
如丝般柔顺。。。
(其实也不尽然,我家的服务器按照上面的步骤,竟然没有最重要的slapd.conf,
郁闷死我了)
 
然后就是找一个Administrator
网上的资源纷繁复杂,让我找了好半天
对LDAP的完全不了解-,-,主要是对Dn,Cn的混淆,
让我尝试了很多客户端都放弃了。。。。
(其实Dn=Base+Cn,皑皑,后来才知道)
最后选择了phpldapadmin,简洁,明了,
主要是在网上搜到了可以直接设置cn,,,
第一个让我登录成功的Administrator….感动了
sudo apt-get install phpldapadmin
 
稍微玩了一把LDAP
感觉就是针对公司机构,人事特别设计的一颗对象树。
Root就是Base Domain
地下可以设置人员CN,机构OU和其他各种对象。
Email Account,User Account,一应俱全。
最主要的是还可以自己Customize,复选多种objectclass来订制节点属性。
其实用处不大,可能主要是已经应用非常广泛了吧。
 
OK,玩好了最大的用处当然是集成到我的应用中。
用过了Spring以后就难以割舍,集成太方便了,inject就有了。
Java Main写的Demo Code可以很方便的intergrate到其他web application中。
所以Spring LDAP当然就是我的不二选择。
 
说实话Spring LDAP非常的贴心,
就怕你不会用,基本的用法完全类似JDBCTemplate(当然还有Triditional的用法,没来得及看)
三下五除二就搞定了(当然除了可怕的dn,cn)….
public class UserDaoLdapImpl {
    private LdapTemplate ldapTemplate;
    public LdapTemplate getLdapTemplate() {
        return ldapTemplate;
    }
    public void setLdapTemplate(LdapTemplate ldapTemplate) {
        this.ldapTemplate = ldapTemplate;
    }
    public List GetAllPersonNames(){
        return this.ldapTemplate.search("","(&(objectclass=person)(cn=*ny*))",
                new AttributesMapper(){
                    public Object mapFromAttributes(Attributes attrs)
                        throws NamingException{
                        return attrs.get("cn").get();
                    }
        });
    }
}
<beans>
    <bean id="contextSource"
        class="org.springframework.ldap.core.support.LdapContextSource">
        <property name="url" value="ldap://XXXX:389" />
        <property name="base" value="dc=xiluo2,dc=com" />
        <property name="userDn" value="cn=admin,dc=xiluo2,dc=com" />
        <property name="password" value="xiuxiu" />
    </bean>
    <bean id="ldapTemplate"
        class="org.springframework.ldap.core.LdapTemplate">
        <constructor-arg ref="contextSource" />
    </bean>
    <bean id="userDao" class="hellospringldap.UserDaoLdapImpl">
        <property name="ldapTemplate">
            <ref bean="ldapTemplate" />
        </property>
    </bean>
</beans>
 
这里还要赞美以下Netbeans
直接建立Web Application就可以支持Spring, Hibernate(虽然没用上)
然后方便的添加Spring LDAP的Jar和beans申明,OK,搞定了。
 
最后就是LDAP和Call Manager的intergration.
1)System->LDAP System,选择类型OpenLDAP
2)System->LDAP Directory,设置Base,IP,port,Username,password(注意cn,dn…)
OK,搞定,Corporation Directory就可以用了。
 

 

Ubuntu 7.10下JDK的手动升级

Tags: ,
Ubuntu 7.10源里面的JDK最新只有6u03.
可恶的CXF需要最新的MTOM只有JDK6u10以后才支持。
没办法,只好手动升级。
 
查看了一下当前的系统变量
JAVA_HOME指向的是/usr/lib/jvm/java-6-sun/
/usr/bin/java指向的是/etc/alternatives/….
update-alternative中java指向的是/usr/lib/jvm/java-6-sun/
/usr/lib/jvm/java-6-sun指向的是/usr/lib/jvm/java-6-sun-1.6.0.03/
看起来修改/usr/lib/jvm/java-6-sun就万事大吉了@@
 
去Sun上下载JDK的bin
压缩,
把解压文件放在/usr/lib/jvm/下
重建/usr/lib/jvm/java-6-sun的link指向新的目录
 
OK.似乎一切都work了,不知道还有什么系统变量之类的没有修改,上帝保佑我吧

 

搭建自己的PBX-asterisk

不小心看到了Cisco加入开源推广Asterisk.
忠心一片的我当然要看看这是啥东西。
不堪不知道,居然据说要replace call manager.
然后好奇心强烈的我当然要看看怎么让它run起来。
run起来以后当然要找Phone来用咯。
79XX貌似很难配置的样子,
突然之间发现原来还有传说中的free SIP softphones –X Lite.
于是Asterisk + Xlite 3的组合就诞生了了。
晚上终于自己革自己打了第一个电话,特此纪念。
 
Asterisk的安装
入门级的安装几乎没有任何要求
 
Asterisk GUI的安装
 
Xlite的安装
 
基本的配置就是两个电话,两个线路
sip.conf

[1000]
type=friend
secret=1000
callerid="Jane Smith" <1000>
host=dynamic
canreinvite=no                ; Typically set to NO if behind NAT
disallow=all
allow=gsm                     ; GSM consumes far less bandwidth than G711-u (ulaw)
allow=ulaw
allow=alaw
dtmfmode=rfc2833
context=xiuxiu

[2000]
type=friend
secret=2000
callerid="Jane Smith" <2000>
host=dynamic
canreinvite=no                ; Typically set to NO if behind NAT
disallow=all
allow=gsm                     ; GSM consumes far less bandwidth than G711-u (ulaw)
allow=ulaw
allow=alaw
dtmfmode=rfc2833
context=xiuxiu

[callmanager]
type=friend
context=xiuxiu
host=*.*.*.*
disallow=all
allow=ulaw
allow=alaw
nat=no
canreinvite=yes
qualify=yes

extensions.conf

[xiuxiu]

exten => 1/1000,1,Answer()
exten => 1/1000,2,Dial(SIP/2000)
exten => 1/1000,3,Hangup()
exten => 1/2000,1,Answer()
exten => 1/2000,2,Dial(SIP/1000)
exten => 1/2000,3,Hangup()
 
exten => 9000,1,Answer()
exten => 9000,2,Dial(SIP/1000)
exten => 9000,3,Hangup()
exten => 5555,1,Dial(SIP/5555@*.*.*.*,30,rT)
exten => 5555,2,Hangup()

下一步的课题
  1. sip.conf的配置
  2. extension.conf的配置(重点,dianplan的编写)
  3. asterisk与79XX的连接配置
  4. asterisk与CallManager的连接配置 (完成,已更新) Asterisk and Call Manager
  5. asterisk的VoiceMail功能
  6. sip协议深入(重点)

 

 

Git & Gitosis的安装与配置(存档)

1 Git安装
sudo apt-get install git-core
sudo apt-get install git-gui git-web git-daemon-run
 
2 Gitosis安装
 
Git的安装完全顺滑无比
Gitosis的安装已开始遇到很多问题。
大概需要注意的
1)sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
不然update不会生效
 
2)可以在gitosis.conf中添加
[gitosis]
loglevel=DEBUG

来调试,这个还是很方便的

遗留问题

1)陆离斑的文章提到了一个分制版本,感觉比较不错,可惜没有尝试

2)还是不懂Gitosis是如何工作的,貌似都没有后台进程,,,貌似是ssh登陆实现的。。。

3)如何实现客户端的直接添加,每次ssh public  key上传也忒辛苦了。

4)Heroku,Github他们自己的那样的Git Host工作方式到底是怎么实现的呢

5)Git具体操作的学习(后会无期了,,,,反正一个人用够了,貌似自己也没有feature checkout branch的习惯)

 

Jabber服务器的搭建

对MSN,Gtalk的机器人有一些兴趣。
正巧知道原来是Cisco购买了Jabber公司,嗯,搭建一下Jabber服务器顺便查看一下统一通讯的可行性。
 
Jabber服务器的挑选
jabberd1.x, 2.x都可以通过apt-get 方便安装。
考虑到可扩展性和熟悉语言,最后选择了Openfire.
 
Jabber客户端的挑选
本来安装了Pidgin, 对msn群的中文支持不太好。
昨天安装了Pandion,效果一般性。
最后为了配合Openfire,决定安装Spark,结果效果更差。
P.S.莫名其妙的在jabber.org注册了帐号,结果啥桥接都没有,郁闷。
 
Openfire的安装
1配置talk.xxx.com
2下载openfire.deb
3dpkg -i
4通过talk.xxx.com:9090/配置openfire
5通过spark连接服务器成功
6下载gateway.jar
7放在openfire/plugins/重起服务器。
8通过openfire服务器开启msn功能。
9配置spark,成功连接msn.
 
遗留问题:
还不是很理解Jabber服务器之间通讯的模式。
是否可以实现一个机器人帐号应对所有IM软件呢。关注。
 

 

无觅相关文章插件,快速提升流量