搭建和连接VPN
有的时候需要从internet上访问内网,又不方便在internet上开端口,vpn就很有用了,这里我们搭个简单的PPTP服务。
搭建PPTP服务
首先安装ppp
$ yum install ppp
然后安装pptpd,这里我们下载一个rpm包:
$ wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.el6.x86_64.rpm
$ rpm -Uvh pptpd-1.3.4-2.el6.x86_64.rpm
修改/etc/pptpd.conf
中的localip和remoteip
localip 192.168.4.1
remoteip 192.168.4.101-200
修改/etc/ppp/pptpd-options
ms-dns 10.10.10.254
mtu 1356
在/etc/ppp/chap-secrets
中加入允许登录的用户名和密码,注意用tab分隔:
username1 * password1 *
最后要打开防火墙,允许tcp协议1723端口和gre协议,也可以允许PPP端口的转发。同时还要调整ppp连接的mss值。
$ iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
$ iptables -A INPUT -p gre -j ACCEPT
$ iptables -A FORWARD -i ppp+ -o eth0 -j ACCEPT
$ iptables -A FORWARD -i eth0 -o ppp+ -j ACCEPT
$ iptables -A FORWARD -p tcp --syn -s 192.168.4.0/24 -j TCPMSS --set-mss 1356
CentOS7:
$ firewall-cmd --permanent --add-masquerade
$ firewall-cmd --permanent --zone=public --add-port=1723/tcp
$ firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -i eth0 -p gre -j ACCEPT
$ firewall-cmd --reload
最后就可以启动pptp服务了:
$ chkconfig pptpd on
$ service pptpd start
搭建L2TP / IPSEC服务
用上面的方法搭的PPTP服务,在Windows下用起来没问题, 但是MacOS上用一会就用不成了,找了好几天都没找到原因,所以干脆再做个L2TP服务。
首先安装所需要的软件:
$ yum install lsof openswan ppp xl2tpd
网上找到的很多资料都说openswan的一个版本有问题,要用旧版本的。我试了下应该问题已经被修复了。
IP转发我们已经开过了,下面再把ICMP转发禁用掉。在文件/etc/sysctl.conf
中增加:
# Controls source route verification
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
# Disable ICP redirects
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
配置文件/etc/ipsec.conf
version 2.0
config setup
interfaces=%defaultroute
klipsdebug=none
nat_traversal=yes
nhelpers=0
oe=off
plutodebug=none
plutostderrlog=/var/log/pluto.log
protostack=netkey
virtual_private=%v4:192.168.4.0/24
conn L2TP-PSK
authby=secret
pfs=no
auto=add
keyingtries=3
rekey=no
type=transport
forceencaps=yes
right=%any
rightsubnet=vhost:%priv
rightprotoport=17/0
# Using the magic port of "0" means "any one single port". This is
# a work around required for Apple OSX clients that use a randomly
# high port, but propose "0" instead of their port.
left=%defaultroute
leftprotoport=17/1701
# Apple iOS doesn't send delete notify so we need dead peer detection
# to detect vanishing clients
dpddelay=10
dpdtimeout=90
dpdaction=clear
配置文件/etc/ipsec.d/ipsec.secrets
,把0.0.0.0改成服务器的IP:
0.0.0.0 %any: PSK "yourPSKHere"
配置文件/etc/xl2tpd/xl2tpd.conf
:
[global]
listen-addr = 0.0.0.0
force userspace = yes
[lns default]
ip range = 192.168.4.100-192.168.4.200
local ip = 192.168.4.1
refuse pap = yes
require authentication = yes
name = xl2tp
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
配置文件/etc/ppp/options.xl2tpd
:
ipcp-accept-local
ipcp-accept-remote
ms-dns 192.168.4.1
noccp
auth
crtscts
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
lock
proxyarp
connect-delay 5000
logfile /var/log/ppp.log
最后还有/etc/ppp/chap-secrets
, 这个是和pptp一样的:
# client server secret IP addresses
user1 * sgrongPassword1 *
user2 * strongPassword2 *
配置好以后启动ipsec和xl2tpd服务:
$ service ipsec start
$ service xl2tpd start
$ chkconfig ipsec on
$ chkconfig xl2tpd on
还要打开防火墙端口,在/etc/sysconfig/iptables
的*filter里添加:
-A INPUT -i eth1 -p udp -m udp --dport 500 -j ACCEPT
-A INPUT -i eth1 -p udp -m udp --dport 4500 -j ACCEPT
-A INPUT -i eth1 -p udp -m udp --dport 1701 -j ACCEPT
Linux命令行连接pptp vpn
在有图形界面的设备上连接vpn很容易,要想在linux下用命令行连接vpn,需要安装一个小的工具:
$ yum install pptp-setup
建立一条vpn连接:
$ pptpsetup --create <name> --server <ip> \
--username <username> \
--passowrd <password> \
--encrypt
在centos下, 需要拷贝几个脚本到可执行目录下并给予可执行权限:
$ cd /usr/share/doc/ppp-*/scripts
$ mkdir ~/bin
$ cp pon poff plog ~/bin
$ cd ~/bin
$ chmod +x pon poff plog
还需要修改plog脚本中的log文件路径为/var/log/messages
然后就可以使用pon <name>
poff <name>
plog
命令进行VPN操作了。
使用ssh的ip隧道做vpn
如果只是想连接2台linux服务器,可以直接使用ssh的ip隧道,不用安装其他任何软件,并且很安全。
首先需要在sshd的配置文件中允许隧道:
PermitTunnel yes
比如我们有一台公网上的服务器,叫www.tiwb.com,可以用ssh命令连接到这台服务器:
$ ssh -w4:4 root@www.tiwb.com
这样两台机器上就会同时增加一个tun4的设备, 然后我们就可以像配置普通网卡一样配置它们了。
下面写一个脚本来配置网络连接,我在脚本中用了一个while,用于断线后自动重新连接。
#!/bin/sh
while true; do
ip tuntap add mode tap tun4
ip addr add 192.168.4.254/32 peer 192.168.4.1/32 dev tun4
ip link set tun4 up
ssh -T -w4:4 root@www.tiwb.com <<EOF
ip link set tun4 up
ip addr add 192.168.4.1/32 peer 192.168.4.254/32 dev tun4
EOF
ip tuntap del mode tap tun4
sleep 60
done