# icmp-tunnel **Repository Path**: fwindpeak/icmp-tunnel ## Basic Information - **Project Name**: icmp-tunnel - **Description**: icmp 隧道,转载:xiaoxia.org - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2017-10-25 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 5、VPS服务器端部署 把icmp.py和tunnel.py都copy到vps上去。注意要设置为可执行文件。然后用下面的命令来运行。 ```shell ./tunnel.py -s 86 -l 10.1.2.1/24 Allocated interface t1 ``` tunnel.py会创建一个虚拟网卡(tun)。上述命令中,虚拟网卡的IP为10.1.2.1,子网掩码为255.255.255.0。 查看已经建立的网卡,我这里显示为t1. 因为t0已经被我用作udp隧道。 ```shell root@244754:~/lab/icmptun# ip route show184.22.224.0/24 dev venet0 proto kernel scope link src 184.22.224.212 10.1.1.0/24 dev t0 proto kernel scope link src 10.1.1.1 10.1.2.0/24 dev t1 proto kernel scope link src 10.1.2.1 default dev venet0 scope link ``` ## 6、笔记本上客户端部署 以客户端模式启动tunnel.py, ``` root@xiaoxia-pc:~/project/icmptun# ./tunnel.py -c 184.22.224.212,86,2012 -l 10.1.2.2/24 Allocated interface t0 ``` -c的参数指定三项内容,用道号分隔,分别是远程服务器端的IP,发送ping时所使用的code,发送ping时所使用的id。code是区别普通的ping包,id是区别不同的客户端。 注意,如果在局域网环境下,经过网关后,这个id可能会变化,但不影响使用,因为回应包进入内网时,id会变回原值。 启动客户端后,在本地可以ping一下IP。 ``` root@xiaoxia-pc:~/project/icmptun# ping 10.1.2.2PING 10.1.2.2 (10.1.2.2) 56(84) bytes of data.64 bytes from 10.1.2.2: icmp_req=1 ttl=64 time=0.065 ms64 bytes from 10.1.2.2: icmp_req=2 ttl=64 time=0.065 ms64 bytes from 10.1.2.2: icmp_req=3 ttl=64 time=0.059 ms ``` 很快就响应了,本地直接返回。 此时ping一下在vps的虚拟网卡,正常情况下,应该能得到回应了。 ``` root@xiaoxia-pc:~/project/icmptun# ping 10.1.2.1PING 10.1.2.1 (10.1.2.1) 56(84) bytes of data.64 bytes from 10.1.2.1: icmp_req=1 ttl=64 time=322 ms64 bytes from 10.1.2.1: icmp_req=2 ttl=64 time=545 ms64 bytes from 10.1.2.1: icmp_req=3 ttl=64 time=400 ms ``` 到目前为止,已经在两台机器之间通过icmp建立了点对点隧道。 7、构建VPN 先在服务器端设置NAT。 ``` iptables -t nat -A POSTROUTING -s 10.1.2.0/24 -j SNAT --to-source 184.22.224.212 ``` 再在本地设置路由表,让默认网关为新创建的t0. 同时注意把vps的ip设置为例外。 ``` ip route add 184.22.224.212 via 10.64.64.64 dev ppp0 ip route del default ip route add default dev t0 ``` 我的路由表如下: ``` root@xiaoxia-pc:~/project/icmptun# ip route show10.64.64.64 dev ppp0 proto kernel scope link src 10.134.75.35 184.22.224.212 via 10.64.64.64 dev ppp0 10.1.2.0/24 dev t0 proto kernel scope link src 10.1.2.2 169.254.0.0/16 dev ppp0 scope link metric 1000 default dev t0 scope link ``` 到此,已经可以通过t0访问网络了。 ``` root@xiaoxia-pc:~/project/icmptun# telnet www.google.com 80 Trying 203.208.46.180... Connected to www.google.com. Escape character is '^]'. ``` 最后 可以把启动客户端以及设置路由的命令,写进一个脚本文件里,这样只需要一个命令,就能使用VPN了!像在我这个地方,就可以用这个工具实现在CMWAP的网络上免费上网,没有流量的限制。 当然,ICMP Tunnel在很多场合下都可以使用,只要ICMP没有被封,就有办法通过ICMP来建立隧道和VPN来摆脱网络限制。