关于openvpn的架设可以参考网上的资料,以下要说的是一些注意事项:
环境:
server part 使用192.168.50.x网段,vpn服务器使用的是10.8.0.x网段,只有一块物理网卡eth0,vpn服务器使用的是tun0隧道模式,openvpn可以使用两种模式tap和tun,关于tap和tun的区别是:
tap把vpn服务器架设成虚拟交换机,需要先做桥接。
tun把vpn服务器架设成虚拟路由器,需要把ip_forward包转发打开!
目标:
连上vpn服务器可以访问内网的机器
注意事项:
当启动vpn服务器,会增加tun0网卡:
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255
client连上vpn服务器会出现tun0网卡:
tun0: flags=4305 mtu 1500 metric 1
inet 10.8.0.6 netmask 255.255.255.255 destination 10.8.0.5
以上10.8.0.1是服务器端的vpn ip,10.8.0.2是服务器端vpn的虚拟gateway
10.8.0.6是client端的vpn ip,10.8.0.5是client端的虚拟gateway!
需要在server.conf配置push “route 192.168.50.0 255.255.255.0″(把50网段推送到客户端)
push “redirect-gateway 10.8.0.5″推送给客户端(10.8.0.5是客户端的虚拟gateway)
服务基本设置好,client应该可以链接!
client链接后,vpn服务器和client的路由表变化如下:
server:
10.8.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
192.168.50.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.8.0.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 192.168.50.1 0.0.0.0 UG 0 0 0 eth0
client:
0.0.0.0 10.8.0.5 0.0.0.0 UG 0 0 0 tun0
10.8.0.0 10.8.0.5 255.255.255.0 UG 0 0 0 tun0
10.8.0.1 10.8.0.5 255.255.255.255 UGH 0 0 0 tun0
10.8.0.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
192.168.1.0 0.0.0.0 255.255.255.0 U 2 0 0 wlan0
此时还不能访问server端内网的其他机器,原因如下:
因为iptable没有添加forward chian,还有就是server还没做nat转发,以致client只能ping vpn服务器本身的50 ip.解决办法就是添加forward chain和做nat转发:
在服务器操作:
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
注意添加tun0到eth0和eth0到tun0的forward,有来有回嘛!
然后就要做nat了:
iptables -t nat -A PREROUTING -s 10.8.0.0/24 -i tun0 -j DNAT –to 192.168.50.166(架设vpn服务器的50网段的ip是166)
这样client端就可以访问server的内网。
可能有个疑问为什么是DNAT –to 50.166,因为之前打开了ip_forward所以这台机器就变成了一台路由器,也可DNAT到其他的路由器,前提是要server能ping通那台路由!
关于iptables nat的chain,有postrouting和prerouting:
postrouting主要是修改源地址,也就是在内网出去的packet,把packet修改成公网的ip,使之能在internet传输,配-o 网卡(出去的网卡)和SNAT –TO XXXX(公网IP地址)
PREROUTING主要是修改目的地址,也就是对外网来的packet,把packet的地址修改内网的地址,使公网的packet能向内网传输,配合-i 网卡(进来的网卡)和DNAT –to XXXX(内网ip地址)
linux做nat需要靠iptables(firewall来做)!
还有一个问题就是在vpn服务器的log出现大量的MULTI: bad source address from client [192.168.1.100]
(192.168.1.100)假定client是使用无线路由上网的时候,以上这个错误,需要在vpn服务器server.conf添加:
client-config-dir ccd
route 192.168.1.0 255.255.255.0
上面有个地方需要注意一下,默认ccd是/etc/openvpn下的一个目录,假设openvpn是通过源代码编译并安装在 /usr/local/openvpn/的,需要把client-config-dir的路径改变一下,/usr/local/openvpn/etc /ccd,如果没有ccd目录,自己创建,并在ccd目录里面创建一个名为client的文件,注意client必须是这个证书里面的名字,因为每张证书 的cn都不一样,要依照证书的command name,并在client文件填入iroute 192.168.1.0 255.255.255.0就可以了,重启服务器,测试
server.conf里面的route 192.168.1.0 255.255.255.0指的是内核到vpn服务器的,而client文件iroute指的是openvpn到client
在以上的架构其实可以不需要在nat添加10.8.00/24到192.168.50.166只需要在POSTROUTING添加一条就可以上网:
iptable -t nat -A POSTROUTING -j MASQUERADE就可以访问网页!
不过需要在iptable FORARD chain先设置tun0到eth0和eth0到tun0的转发,或者可以在FORWARD chain设置端口的控制!
sysctl.conf添加以下:
#=====================for openvpn
net.ipv4.conf.tun0.force_igmp_version = 0
net.ipv4.conf.tun0.mc_forwarding = 0
net.ipv4.conf.tun0.forwarding = 1
net.ipv4.conf.eth0.force_igmp_version = 0
net.ipv4.conf.eth0.mc_forwarding = 0
net.ipv4.conf.eth0.forwarding = 1
net.ipv4.conf.lo.force_igmp_version = 0
net.ipv4.conf.lo.mc_forwarding = 0
net.ipv4.conf.lo.forwarding = 1
net.ipv4.conf.default.force_igmp_version = 0
net.ipv4.conf.default.mc_forwarding = 0
net.ipv4.conf.default.forwarding = 1
net.ipv4.conf.all.force_igmp_version = 0
net.ipv4.conf.all.mc_forwarding = 0
net.ipv4.conf.all.forwarding = 1
还有就是把net.ipv4.ip_forward = 1转发打开!
========================================
MASQUERADE的作用:
假如当前系统用的是ADSL动态拨号方式,那么每次拨号,出口ip192.168.5.3都会改变,而且改变的幅度很大,不一定是192.168.5.3到192.168.5.5范围内的地址
这个时候如果按照现在的方式来配置iptables就会出现问题了。因为每次拨号后,服务器地址都会变化,而iptables规则内的ip是不会随着自动 变化的,每次地址变化后都必须手工修改一次iptables,把规则里边的固定ip改成新的ip。这样是非常不好用的。MASQUERADE就是针对这种 场景而设计的,他的作用是,从服务器的网卡上,自动获取当前ip地址来做NAT。
暂时这么多!以后再添加!
阅读(7899) | 评论(0) | 转发(0) |