linux搭建vpn服务

在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 & 即可。

猜你喜欢

转载自blog.csdn.net/Flonan/article/details/88378583
今日推荐