20191211 Linux系统下IPV6 over IPV4隧道建立

最近,懒得去实验室,想在宿舍调试开发板。宿舍网络办的联通宽带,有ipv6地址,实验室也有ipv6地址,可以通过ssh连接。

然而,某个FPGA开发软件似乎不支持通过IPV6地址远程调试,输入IPV6地址会显示未知主机。于是乎,我就试图寻找一种方法,顺便学习一下,如何让目前已有不支持IPV6协议的软件工作在IPV6协议下。

老师听了我的描述,说可以使用ssh端口转发功能。也就是说,服务端开启ssh端口转发,监听ipv6上的端口,转发到本地ipv4端口上,客户端同理,这听起来似乎可行,但是以后对于每一个软件都要开启特定的端口,感觉可能会很麻烦。

搜索资料,发现一种方法叫做建立IPIP6隧道,意思是将IPV4的数据包包裹在IPV6数据包中。值得一提的是,现在IPV6据说还是一个个网络孤岛,有些IPV6网络似乎是将IPV6数据包包裹在IPV4数据包里头的(套娃)。如果不考虑大量数据传输,如果不考虑网络安全,似乎是一种可行的方法。

目标是这样的,搭建一个地址为192.168.2.x的ipv4网络,以区别于宿舍内网的192.168.1.x,图大概如下:

网上一些资料的拓扑图在每个Host前还画了个Router,这里似乎不太需要的样子,因为电脑本身可以实现路由的功能嘛。

俩电脑都是Linux系统,内核高于2.6,带有ip6_tunnel模块。

# 这些命令基本上都需要root权限,至少需要网络管理的权限吧,sudo走起
# 安装ip6_tunnel模块
modeprobe ip6_tunnel
# 增加一个ipip6隧道,名称为tun0,需要准确的远端地址和本地地址,本地地址不能填写::1(原因实在不懂)
ip -6 tun add tun0 mode ipip6 remote 远端IPV6地址 local 本地IPV6地址
# 开启tun0这个隧道
ip link set tun0
# 为tun0增加ip地址,自行规划的地址
ip addr add 规划的本地IPV4地址 dev tun0
# 设置路由表,发往这个地址的数据包从tun0隧道走,后面的32表示子网掩码
# 其中,32表示当且仅当地址是远端目标的时候从隧道走
# 如果是24,表示发往192.168.2.XXX一片地址都从隧道走
ip route add 规划的远端IPV4地址/32 dev tun0
# 刷新路由表,立刻生效(似乎不这么做也行)
iptables -F

最后,使用ping等命令测试一下是否能够连通。

经过这么增加隧道路由规则,那个只支持IPV4的开发软件终于可以远程调试了。又能继续当咸鱼了。

附注:这个方法还是存在麻烦的地方:IPV6地址大概每隔一段时间就会改变,因此,需要搭配一个域名和自动更新的脚本使用。

感谢IPV6,没有公网IP也能偷懒了。

20191211

猜你喜欢

转载自www.cnblogs.com/AmnesiaBeing/p/12025229.html