1、将client内容copy到client的/etc/vtund.conf中
2、将server内容copy到server的/etc/vtund.conf中
3、client开启tunnel命令 vtund server 219.245.89.89
4、server开启tunnel命令 vtund -s

注:
1.219.245.89.89为server端IP
2.server开启tunnel也可尝试 /etc/init.d/vtrn restart
3.client虚拟IP 10.10.10.88 server虚拟IP 10.10.10.99
4.client获得学校IP 219.245.89.57 server eth0获得学校IP 219.245.89.89 eth1 192.168.0.1
5.client端 ping 10.10.10.99 可通!server端 ping 10.10.10.88 可通!
6.client端 ping 192.168.0.1 通!

要解决的问题:
1。为什么ping 192.168.0.1 不通?是client的问题还是server的问题?(加路由可通)
若是client的问题,是不是路由的配置问题?
若是server的问题,应该是路由或者转发的问题?
2.总的问题可否理解为隧道建立了,但是数据并没从隧道走?

2.clinet开启tunnel命令vtund server 219.245.89.89是否说明了
所有包都进行里包头目的地址为219.245.89.89的封装(client端路由只有一项与tunnel有关 10.10.10.99 tun0,server端类似)?

3.在做这个实验时,学校认证客户端总是掉线,与此实验有关联吗?

解决思路:
1。client端加路由route add 192.168.0.1 dev tun0
此时ping 192.168.0.1可通(有回复信息),但server端抓包发现server的eth1没有响应,而是eth0响应;
且server端的tun0有接收也有发送。
由上可否得出结论——虚拟网卡和真实网卡绑定成功了,问题出在server端的转发上?

由此,还要进一步分析vtun用到的封装解封是如何操作的!

2。client端ping www.baidu.com以及traceroute www.baidu.com没能得出包被发往server了
(因为没看到有进入server5000端口的数据,但是ping的响应时间为118ms左右大于平时的20ms左右)。

3。client端加路由route add 119.75.218.77 dev tun0 (百度IP),
结果:client无响应,但在server端可以看到有数据进入eth0端口5000;且server端的tun0看到有数据进入,但是没数据出去;
这里要对比192.168.0.1(server 内网网卡eth1)配置路由后客户端有响应这个实验!说明了什么?
第一,起码说明,可以肯定client端凡是进入tun0的数据(这个要自己配路由)都发往server端了;
第二,应该说明server端的转发出问题了,没转发出去,那么ping 192.168.0.1 client端有响应说明什么呢?
难道说明server必须是两块网卡一进一出,即client端连外网网卡eth0,server连内网网卡eth1
(这样的拓扑和切换要求的拓扑有些不同,想要的拓扑应该是client连内网网卡eht1,eth0通过学校认证连接到外网)

4。为验证上面3中的想法,client继续连外网,server eth0连外网,eth1连接一台pc地址为192.168.0.111。
client端未加路由直接ping 192.168.0.111无响应,加路由route add 192.168.0.111 dev tun0仍然无响应,
但server端tun0有接收,无发送(类同ping 百度IP的试验结果)。
这实验证明3中假设不成立,问题应该还是出在server的的转发上。

5.与最后封装后传输用的协议有关吗?下面改动client和server的proto为tcp尝试。无果。。。

6.黔驴技穷了。。。

7.充分怀疑是转发的问题,还是得从配置文件入手,所以下一步打算是看懂并理解client和server的配置文件,看懂后在做下一步关于转发等的问题。

8.配置文件中的up/down选项中的program选项官方解释“program - Run specified program.”即运行特殊命令的使用到的选项,可以这么理解,选项ifconfig和firewall等是常规的选项,但是如果用户还想自己运行某个命令,则可以使用program。

9.
#为理解配置文件中的arp选项,特学习arp相关知识,下面内容来自网页
我们先看一下linux下的arp命令(如果开始arp表中的内容为空的话,需要先对某台主机进行一个连接,例如ping一下目标主机来产生一个arp项
Linux Arp命令显示和修改地址解析协议(ARP)使用的“IP 到物理”地址转换表。
ARP -s inet_addr eth_addr [if_addr]
ARP -d inet_addr [if_addr]
ARP -a [inet_addr] [-N if_addr] [-v]
-a 通过询问当前协议数据,显示当前ARP项。如果指定inet_addr,则只显示指定计算机的IP地址和物理地址。如果不止一个网络接口使用ARP,则显示每个ARP表的项。
-g 与-a相同。
-v 在详细模式下显示当前ARP项。所有无效项和环回接口上的项都将显示。
inet_addr 指定Internet地址(IP地址)。
-N if_addr 显示if_addr指定的网络接口的ARP项。
-d 删除inet_addr指定的主机。inet_addr可以是通配符*,以删除所有主机。
-s 添加主机并且将Internet地址inet_addr与物理地址eth_addr相关联。物理地址是用连字符分隔的6个十六进制字节。该项是永久的。
eth_addr 指定物理地址。
if_addr 如果存在,此项指定地址转换表应修改的接口的 Internet 地址。如果不存在,则使用第一个适用的接口。
示例:
添加静态项。这个很有用,特别是局域网中中了arp病毒以后
# arp -s 123.253.68.209 00:19:56:6F:87:D2
# arp -a .... 显示 ARP 表。
但是arp -s设置的静态项在用户登出之后或重起之后会失效,如果想要任何时候都不失效,可以将ip和mac的对应关系写入arp命令默认的配置文件/etc/ethers中
例如:
引用
root@ubuntu:/# vi /etc/ethers
211.144.68.254 00:12:D9:32:BF:44
写入之后执行下面的命令就好了
引用
arp -f /etc/ethers
为保证重起之后绑定仍然有效,需要把上述命令写入/etc/ethers
ARP(Address Resolution Protocol),或称地址解析协议。
本地机向"某个IP地址 -- 目标机IP地址"发送数据时,先查找本地的ARP表,如果在ARP表中找到"目标机IP地址"的ARP表项,(网络协议)将把"目标机IP地址"对应的"MAC地址"放到MAC包的"目的MAC地址字段"直接发送出去;
如果在ARP表没有找到"目标机IP地址"的ARP表项,则向局域网发送广播ARP包("目的MAC地址字段" == FF:FF:FF:FF:FF:FF),目标机将向本地机回复ARP包(包含目标机的MAC地址)
#为理解配置文件中的arp选项,特学习arp相关知识,下面内容来自网页

从上面的话可以得出,arp表主要解决IP——MAC即网络层到物理层传输的问题,也是添加MAC帧头的问题,配置好arp表,可省去广播寻找目的IP对应的MAC这一过程。

下面分析配置文件中的program /sbin/arp "-sD 192.168.1.203 eth1 pub"; 192.168.1.203为client虚拟地址。
program 上面谈过了,是执行一个特殊的命令(相对ifconfig firewall等而言),关键看-sD选项,-s选项是配置一条静态arp表项,但对应关系是IP——MAC,加上-D后对应关系变为IP——接口,即只是指定里IP对应的接口而不是mac地址。

但仍不能理解此语句,难道是"凡是到client虚拟地址帧头都为eth1”?这个eth1显然是server内网网卡,目的地址为client虚拟地址的帧头为server内网MAC,这逻辑上说不通!

所以,又看了chinaunix论坛配置文件的参考文档,应该是作者写错了,这里的192.168.1.203应该为server的虚拟地址,这样逻辑上也能说通,即凡是到server虚拟地址的包帧头一律为server内网网卡eth1的MAC,即可理解为server的虚拟网卡和server的内网网卡绑定了。

要做的实验:去掉配置文件中的该语句,看看隧道是否能通,能出现什么样的结果。

10.再理解配置文件中语句firewall "-I forward -s 192.168.1.0/24 -d 192.168.1.0/24 -j ACCEPT";
-I是插入的意思-D是删除,语句意思是源192.168.1.0/24 目的 192.168.1.0/24一律转发。

问题来了,这里vtun的配置是不是和我在server上的防火墙配置有关系?关键两点,一是防火墙的forward选项,二是server的SNAT配置。
要做的实验:1。server改为forward accept 2。分析SNAT

要做的实验:一是按照参考文档给出的client to netowork 拓扑实验,二是,改变拓扑.

11