最近看到IT邦帮忙有许多讨论VPN的问题,也帮一个邦友回答一个问题,但我认为哪不能算是好的答案,因为都没有讲到技术的部份。gvpe是之前受人所託在成本及可用性考量下上网找到的。会使用它也是看了别人的推荐,http://forum.shareget.com/t142127/。虽然gvpe的info讲解算清楚,但还是测试了一段时间才搞定,其中较不易了解的部份就是if-up这支shell script,所以我就将现在我用的if-up分享一下,号召大家来使用!!
gvpe要能正常运作有两个档案很重要,gvpe.conf跟if-up。gvpe.conf就是根据不同的node作设定的档案,但都使用同一个档案,参考info说明应该大家都能了。if-up是一支搭配gvpe设定的变数所成的shell script,用来建立虚拟网卡的相关事宜,包括网卡设定及路由等。现就以三个site的互联简单说明:
1、假设site A 192.168.1.0/24,VPN gateway nodename A:eth0 192.168.1.1(对内IP) , eth1:<<对外上网的IP>>
2、假设site B 192.168.2.0/24,VPN gateway nodename B:eth0 192.168.2.1(对内IP) , eth1:<<对外上网的IP>>
3、假设site C 192.168.3.0/24,VPN gateway nodename C:eth0 192.168.3.1(对内IP) , eth1:<<对外上网的IP>>
if-up的程式及说明如下:
#!/bin/bash# 设定虚拟网卡的装置名称、MAC Address及TX Queue Length# 虚拟网卡的装置名称、MAC Address都用预设的,TX Queue Length则是参考实体网卡的值ip link set "$IFNAME" address "$MAC" txqlen 1000 up# 依据不同的Node name设定虚拟网卡的IP# Node name必须与gvpe.conf中设定的一样[ "$NODENAME" = "A" ] && ip addr add 192.168.1.254 broadcast 192.168.1.255 dev "$IFNAME"[ "$NODENAME" = "B" ] && ip addr add 192.168.2.254 broadcast 192.168.2.255 dev "$IFNAME"[ "$NODENAME" = "C" ] && ip addr add 192.168.3.254 broadcast 192.168.3.255 dev "$IFNAME"# 设定VPN的预设路由ip route add 192.168.0.0/16 dev "$IFNAME"# 依据不同的网段设定路由# eth0被设计为内部网段的网卡,以eth0的IP第三组数字确定网段IN_NIC="eth0"IN_IP=`ifconfig "$IN_NIC"|grep -w "inet addr"|cut -d':' -f2|cut -d' ' -f1`IN_IP_SUB=`echo "$IN_IP"|cut -d. -f3`for i in 1 2 3do if [ "$i" = "$IN_IP_SUB" ] then continue fi route add -net 192.168.$i.0 netmask 255.255.255.0 gw 192.168."$i".1done
gvpe本身提供的範例有点长,我这样作也许不是最好的,但已经可以通了,而是end to end,不是只要作为VPN gateway的电脑互通而已。另外gvpe也支援node-up跟node-down这两个档案,但是我都没有设定也能执行。有问题可以多交流,希望大家都来试试!!
还是要再强调一次,gvpe只是利用上网线路设定VPN的工具,记得要设定firewall等资安工具,以免被骇。