搭建家用的OpenVPN服务器
啥都不说了,贝壳最近搞了一个家用的OpenVPN服务器,任何机器,随时随地可以穿到家里来,很方便。用VPN干啥?这就多了。我可以用vpn操作 Windows上的vnc,使用Windows的共享文件服务,直接向Linux Server放文件(这样别人可以用http下载),查看摄像头(被网络公布了)。将来如果有其他网络设备(例如冰箱和空调),也可以一并管理。不过最直 观的——可以很方便的打游戏,我们根本就在一个网络里面。要点是,这些服务要分别开映射端口非常麻烦。而且有的服务从安全起见,根本不能开端口(例如臭名 昭著的Windows文件共享服务)。 具体原理上,贝壳有一台Windows,上面用Vmware搭建了一台Debian Linux,两者使用桥接模式。从概念上看,就是一台通向公网的路由器,里面放了一台Windows和一台Linux。现在,贝壳想通过某种方法,将外部 的一台机器接入内部的局域网中,就如同随身携带着一根通向家里路由器的网线一样。 下面直接上具体配置: ———–filename: /etc/network/interface——————- auto lo iface lo inet loopback iface eth0 inet static address 0.0.0.0 iface tap0 inet static address 0.0.0.0 auto br0 iface br0 inet static bridge_ports eth0 tap0 address 192.168.1.IP netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1 dns-nameservers 192.168.1.1 dns-search home ————————————————————- 使用上述配置的原因是,vpn只能联通你机器上的逻辑网卡和服务器上的逻辑网卡。单就vpn自身而言,是无法让你连到服务器上的内网网卡的。因此,我们需要通过网桥的配置,将eth0和tap0配置成网桥。这样,你的服务器就如同一台交换机一般,联通了两个网段。 而后,我们设定服务器配置。 ———–filename: /etc/openvpn/server.conf—————- local 192.168.1.51 port 1194 proto udp dev tap0 ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/server.crt key /etc/openvpn/keys/server.key dh /etc/openvpn/keys/dh2048.pem server-bridge 192.168.1.IP 255.255.255.0 192.168.1.100 192.168.1.149 push “route 192.168.1.0 255.255.255.0” keepalive 10 120 user nobody group nogroup persist-key persist-tun cipher DES-EDE3-CBC # Triple-DES comp-lzo verb 3 status /var/log/openvpn-status.log ;log openvpn.log log-append openvpn.log
其中的server-bridge是因为我们采用网桥的关系,100-149是向外部拨入分配的IP池。贝壳的2-100是内部固定IP保留,150-199是内部DHCP池,200-254保留。这个大家可以按照自己的情况配置。 需要特别注意的是,由于上文我们已经建立了tap0这个设备,因此才dev中必须指定tap0设备。如果你仅写tap,那有可能是新建一个设备出来。到时候就好玩大了… 上文中,我们使用了ca cert key dh四个密钥文件选项。下面我们说说如何产生这些密钥文件。 首先,你需要复制usr/share/doc/openvpn/examples/easy-rsa/2.0/到你的个人目录,并修改其中的vars文 件。将其中的一些东西修改为你需要的参数(很简单,我假定大多数人都会用,这个是基于SSL的),而后source vars,执行下述命令。 ./clean-all ./build-ca ./build-key-server server ./build-dh #需要�入密�的 ./build-key-pass username #不需要�入密�的 ./build-key username 最后两个可以随便签署,想发多少密钥就给多少人签署。不过请注意,easy-rsa的默认脚本中,是没有ns-cert-type server的设定的,因此*千万不要*在配置中加上这个设定。否则会导致TLS handshark failed。 最后,启动vpn,并且修改你的防火墙和路由器映射,贝壳这里使用的是udp1194端口(默认)。再给客户分发配置和key,具体如下: ——————filename: home.ovpn———————– remote shell909090.3322.org 1194 client proto udp dev tap ca home.crt cert shell.crt key shell.key resolv-retry infinite persist-key persist-tun cipher DES-EDE3-CBC comp-lzo verb 3
其中home.crt是服务器上的server.crt,shell.crt和shell.key是刚刚签署的用户密钥。如果有密码,需要设定密码,或在连接时提供。 – 与其相濡以沫,不如相忘于江湖