在linux下搭建vpn服务,有一款开源软件:openvpn。可以分三步走来实现搭建。
1,检测环境和下载所需软件。
1.1,检测是否启动了tun(支持虚拟网络设备)驱动模块:modinfo tun;
如果提示“could not find module tun”则需要重新编译此驱动模块,然后将其加载,具体做法:
1.1.1 进入内核源码的目录(我的是在/usr/src/linux下):cd /usr/src/linux; 执行make menuconfig 来选中tun驱动模块,具体的路径:Device Drivers/Network device support/Universal TUN/TAP device driver support,然后将其选中[M]即可;
1.1.2 make modules;编译刚刚选中的驱动;
1.1.3 make modules_insatll;安装驱动。其实这个驱动是放置在/lib/modules/`uname -r`/kernel/drives/net目录下的,所以你也可以将编译好的驱动文件tun.ko拷贝到此目录下:cp /usr/src/linux/tun.ko /lib/modules/`uname -r`/kernel/drivers/net;
1.1.4 depmod; modprobe;调整相依性,加载驱动;
1.1.5 lsmod | grep -i tun;查看tun是否加载成功。
1.2,下载lzo库文件、openssl和openvpn软件。
1.2.1 下载lzo库文件。wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.02.tar.gz
将下载好的源码解压到/usr/local/src目录下:tar -zxv -f lzo-2.0.2.tar.gz -C /usr/local/src;
安装库文件:./configure; make; make install
1.2.2 下载openssl软件。emerge openssl;(ubuntu 可以 sudo apt-get install openssl; centos可以:yum install openssl)
1.2.3 下载openvpn。emerge openvpn(ubuntu下 sudo apt-get install openvpn,而且会自动生成一个/etc/openvpn的目录,不过ubuntu默认不会下载源码,再执行一条这样的指令:sudo apt-get source openvpn即可下载源码),源码放置在/usr/portage/distfiles目录下,将其解压到/usr/local/src下:tar -zxv -f openvpn-2.2.2.tar.gz -C /usr/local/src.
2,生成证书,配置server.conf文件。
2.1 进入到/usr/local/src/openvpn-2.2.2/easy-rsa/2.0/目录下,编辑vars文件。
[root@open-server~] vim vars
export easy-rsa=`pwd`
export KEY_CONFIG=$easy-rsa/openssl.cnf
export KEY_DIR=$D/keys
export KEY_SIZE=1024
export KEY_COUNTRY=CN
export KEY_PROVINCE=SC
export KEY_CITY=CD
export KEY_ORG="openvpn.org"
export KEY_EMAIL="[email protected]"
2.2 执行vars。. vars(前面是个'.'而且有空格。或者source vars)。执行后出现:“NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/local/src/openvpn-2.2.2/easy-rsa/2.0/keys”;
2.3 生成keys。./clean-all。执行此指令后将会在当前目录下生成一个keys目录;
2.4 生成ca.crt、ca.key。./build-ca 然后一路回车即可;
2.5 生成vpn server端证书。./build-key-server server(server端证书的前缀名,名字可以随便起),一路回车,最后两个选y;
2.6 生成客户端证书。./build-key user(客户端证书的前缀名),也是一路回车,最后两个选y;
2.7 生成dh1024.pem文件。./build-dh;
2.8 将整个keys文件夹拷贝到/etc/openvpn/(如果没有就nkdir /etc/openvpn)目录下:cp -rf keys /etc/openvpn/
2.9 写server.conf文件(这个是openvpn server端的配置文件)。
vi server.conf
port 1194 # 端口号
proto udp # 协议
dev tun # 隧道模式(还有tap的)
ca /etc/openvpn/keys/ca.crt # 相应的证书
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh1024.pem
server 10.8.0.0 255.255.255.0 # 服务器分配ip地址空间给客户端
ifconfig-pool-persist ipp.txt # 记录客户端ip的地址
push “redirect-gatway def1 bypass-dhcp” # 客户端能直接连到他们默认的网关
mode server
tls-server
client-to-client # 不同的客户能看彼此,就像网上邻居的概念
duplicate-cn # 能链接多个客户端
keepalive 10 120 # 没什么好说的,协议用来保持链接的
comp-lzo # Enable compression on the VPN link.
persist-key
persist-tun
status openvpn-status.log # 状态日志
verb 4
3 配置防火墙(iptables),开启vpn
[root@open-server~]iptables -t nat -A POSTROUTING -j MASQUERADE //本句是用来让我们的vpn client能够通过通过我们的vpn server访问internet。
[root@gate-way~]iptables -t nat -A PREROURING -p udp --dport 1194 -i eth1 -s 0.0.0.0/24 -j DNAT --to-destination 222.197.180.168:1194
[root@gate-way~]iptables -t nat -A PREROURING -p tcp --dport 1194 -i eth1 -s 0.0.0.0/24 -j DNAT --to-destination 222.197.180.168:1194
//这两句的意思是,当一个ip用1194端口访问我们的网关时,网关就把这个目地地址转成我们的vpn server的址,即222.197.180.168的1194端口。
查看配置好的iptables列表:iptables -t nat -L -n;
修改/etc/sysctl.conf文件,将net.ipv4.ip_forward = 1,来使得linux具有包转发的能力;
将一切都安排妥当之后求可以开启vpn服务了:/usr/local/sbin/openvpn /etc/openvpn/server.conf >/dev/null &.
附:
客户端的配置文件:
client.conf
1 client
2 dev tun
3 proto udp
4 remote 222.197.180.168 1194
5 resolv-retry infinite
6 nobind
7 mute-replay-warnings
8 redirect-gateway
9 ca /etc/openvpn/ca.crt
10 cert /etc/openvpn/user.crt
11 key /etc/openvpn/user.key
12 comp-lzo
13 verb 4
如果想在终端开启vpn的话,可以一下openvpn(ubuntu下sudo apt-get install openvpn),然后从服务器将user的证书下载到/etc/openvpn目录下,在终端下执行openvpn /etc/openvpn/client >/dev/null & 即可。