Ubuntu 服务器安装与配置 OpenVPN 服务

安装 OpenVPN

sudo apt-get install openvpn

配置 OpenVPN
1. 证书生成

sudo cp -a /usr/share/doc/openvpn/examples/easy-rsa/2.0/ /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa/
sudo ln -s easy-rsa/keys /etc/openvpn/keys
sudo mkdir /var/lib/openvpn/
sudo vim vars  # 编辑 vars
export KEY_COUNTRY=""
export KEY_PROVINCE=""
export KEY_CITY=""
export KEY_ORG=""
export KEY_EMAIL=""

注意:KEY_COUNTRY 和 KEY_PROVINCE 都以两个大写字母表示。

source ./vars
./clean-all
./build-ca
./build-key-server server
./build-key client
./build-dh

注意:./build-key-server 与 ./build-key 使用默认选项即可。
2. 服务器配置

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
sudo gunzip server.conf.gz
sudo vim server.conf # 编辑 server.conf,修改下面的部分
ca keys/ca.crt
cert keys/server.crt
key keys/server.key
 
dh keys/dh1024.pem
 
ifconfig-pool-persist /var/lib/openvpn/ipp.txt
 
push "redirect-gateway def1"
 
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
 
status /var/lib/openvpn/status.log
 
user user
group group

3. 启动OpenVPN服务

sudo service openvpn start

配置 NAT

sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source xxx.xxx.xxx.xxx # 公网IP
sudo sysctl net.ipv4.ip_forward=1
sudo vim /etc/sysctl.d/10-ip-forward.conf
net.ipv4.ip_forward=1

导出客户端证书

sudo cp /etc/openvpn/keys/{ca.crt,client.crt,client.key} ~  # 将这三个文件打包下载到客户端即可

Over!

为 Home 加密的用户启用 OpenSSH 证书认证

Ubuntu 不知从什么时候在安装时增加了用 ecryptfs 为 Home 启用加密的支持,要说这个功能挺好的,不用担心私有的文件会泄漏。但是你可能已经发现这样的加密引发了一个问题,启用了这样的加密功能的用户,无法通过增加 ~/.ssh/authorized_keys2 公钥实现证书认证。下面我们就来解决这个问题。

Home 加密的实现
1. 系统会创建 /home/.ecryptfs/ 文件夹,并在里面创建以用户名命名的文件夹,这个以用户名命名的文件夹里还创建了 .ecryptfs 和 .Private 两个文件夹,分别用于保存加密配置信息和加密后的数据。
2. 在用户的真实 Home(即没有挂载 ecryptfs 前的 Home )里有两个重要的符号链接文件 .ecryptfs 和 .Private 分别链接到 /home/.ecryptfs/用户名/.ecryptfs 和 /home/.ecryptfs/用户名/.Private 。
3. 当用户登录时,如果认证通过,会自动将真实 Home 里的 .ecryptfs 挂载到 真实 Home 文件夹上,即 /home/用户名/,这时用户名主目录就变成加密后的了,可以看到里面有很多的文件。
4. 当用户注销,自动卸载加密主目录。

解决办法
1. 复制证书的公钥到 /tmp 目录待用。
2. 注销用户,转到虚拟控制台(Ctrl+Alt+Fx)。
3. 登录用户,执行命令 ecryptfs-umount-private,完成后执行 cd /home/用户名 可以看到里面的文件已经不是原来的了。
4. 执行命令 mkdir .ssh 创建一个 .ssh 文件夹,复制刚才存放在 /tmp 里的公钥文件到刚创建的 .ssh 文件夹里,命名为 authorized_keys2。
5. 执行命令 ecryptfs-mount-private 并注销用户
6. 转到图形界面登录。
注:没有图形界面,直接做 2-5。

Over!

Windows 系统中“运行”与显示 Linux 程序

通常我们使用 Linux 作为服务器,而使用 Windows 作为工作站。在 Linux 服务器中多数也就是执行命令行程序,而将处理的结果传回 Windows 上再进行格式输出。而有些时候我们我们的应用会有点复杂,需要执行 Linux 的图形界面程序,并在 Windows 工作站上显示图形界面,进行交互,同时要求与直接在服务器上操作并没有太大的差别。事实上这一切是完全可以实现的,这得益于 X Window 这套图形系统的强大设计。下面我们以一个实例说明一下使用的方法。

应用程序
Linux 服务器端(Ubuntu 10.04 Desktop)
1. X Window client
2. OpenSSH Server
Windows 工作站 (Windows XP SP3)
Xming

配置 Linux 服务器端

sudo aptitude install openssh-server

配置 Windows 工作站
1. 下载 Xming
下载地址:http://sourceforge.net/projects/xming/

2. 安装 Xming
都使用默认选项即可。

3. 配置 Xming
a. 运行 XLanuch.exe
b. 选择 Multiple windows, Display number: 0, 下一步
c. 选择 Start program, 下一步
d. Start program: gnome-terminal, 下一步
e. 选择 Using PuTTY(plink.exe)并选择 With compression, Connect to computer: 这里输入 Linux 服务器地址, Login as user: 这里输入用户名, Password (…): 这里输入登录密码,下一步
f. 默认,下一步
g. 保存配置,根据需要选择是否保存密码,完成。

这时将会在 Linux 服务器端运行 gnome-terminal 程序,并将图形界面显示在 Windows 工作站上。工作站用户可以在这个终端里执行其它的程序(包括图形界面应用程序)。

Over!

Android Wired Tether 有线共享手机网络

Android Wired Tether 可以将手机模拟成一个有线网卡,通过USB连接的计算机就可以通过手机的移动网络接入到 Internet,这款软件与 Android Wireless Tether 非常类似,只是它是有线的。

手机要运行这款软件需要 root 权限,同时内核也需要支持,具体看官方的说明。

我在 Ubuntu 10.04 LTS 操作系统的计算机上连接 G1,NetworkManager 能够自动连接网络,无需任何配置,非常方便,推荐使用。

Over!

Ubuntu 9.10 远程桌面、声音 (XDMCP,PulseAudio)

本文说明如何在 Ubuntu 9.10 操作系统中启用 XDMCP 类型的远程桌面并保留声音在服务器端。

我们需要启用 PulseAudio 的系统模式,来解决 XDMCP 远程登录的用户不能使用声音的问题。需要将使用声音的用户加入到 pulse-access 组中才可以访问 pulseaudio 服务。

需要修改的配置文件

/etc/gdm/gdm.schemas
/etc/default/pulseaudio

修改这个 /etc/gdm/gdm.schemas 配置文件启用 XDMCP 访问

    <schema>
      <key>xdmcp/Enable</key>
      <signature>b</signature>
      <default>true</default>
    </schema>

修改这个配置文件 /etc/default/pulseaudio 启用 PulseAudio 的系统模式

PULSEAUDIO_SYSTEM_START=1
DISALLOW_MODULE_LOADING=0

使用下面的命令将需要使用声音的用户加入 pulse-access 组

sudo gpasswd -a username pulse-access

重启系统或启动 pulseaudio 服务。

Over!