IPV6

Openwrt校园网原生ipv6设置_同济大学版(新手导向)

2017-07-23  本文已影响931人  木子识时务

写在前面:之前配置学校的Ipv6尝试过很多种方法,走过很多弯路,花了比较多的时间与精力。虽然这种实现方法不是最优的,但还是把自己配置成功的方法的贴出来,供大家参考吧。理论上,所有高校的原生Ipv6都可以使用此方法。

教程中刷入的固件不含有SS,屏蔽广告等功能,只因K2 Flash太小,刷入一个Ipv6的hosts文件就基本满了,当然也可以根据需要自己精简这个Hosts,本人比较懒,就设置成自动从github上更新了。

Ipv6能干吗?

Ipv6是什么我就不科普了,请参照百度百科:百度百科-Ipv6。Ipv6已经配置好了的可以参照维基百科:维基百科-Ipv6

支持SS翻墙说不定是很多人刷Openwrt或其它固件(诸如华硕固件)的原因,但是其实Ipv6是没有墙的。因为GFW只是针对ipv4的,所以只要被墙的那些网站是支持IPV6的,那么用ipv6访问是没有任何问题的。目前来看,Google,Youtube,维基百科,Facebook这些常用的网站都是有Ipv6站点支持的(Twitter暂时没有)。具体有哪些网站支持Ipv6,可以通过这个网站查看:Ipv6-hosts(有些是Ipv4的hosts,只看Ipv6的即可)

有了Ipv6,就可以上六维空间等各大PT站了,这对于啥也没有的同济内网来说,无疑是一大福利。

六维空间

经过测试,同济的实验室和寝室也是会自动分配Ipv6地址的(具体测试地点是嘉定校区的寝室,以及宁远馆和迩楼)。寝室的Ipv6速度被电信限速在8M左右,宁远馆和迩楼好像没被限速(K2渣渣,Wan口只有100M,测试网速是能到100M的。所以,速度上限到底多少,未知)

一般我们把电脑直接插到网口上是可以获取到Ipv6地址的,并使用Ipv6的。但是把路由器搬到网口,再把上网设备连接到路由器上,就不能再用Ipv6了。主要原因是现在Ipv6普及度还比较低,市面上的许多路由器在软件程面上都不支持ipv6。我们要做的就是刷掉路由器本身有的固件,让我们的设备能通过路由器使用Ipv6。最终达到的效果是,让支持Ipv6的网站(大部分是ipv4被墙的网站)走Ipv6线路,其它的走常规的Ipv4线路,所有设置在路由器中完成,上网终端只要支持Ipv6协议即可,不需任何额外的设置。

寝室里面的Ipv6是直接插上电信的口就可以用的,不需要宽带账号,这也算是同济为数不多的福利吧。

下面来几张最终的结果图。测试地点:迩楼

Youtebe_1080P

1080P寝室8M的限速也是可以流畅的看的,当然,多设备的话估计就比较卡了。

1.设备信息

路由器型号:斐讯K2(Wndr 4300经测试也可用Nat6种方法,理论上任何可刷基本Openwrt固件的路由器均可使用此种方法设置Ipv6)

需要下载的工具:

1.1 固件:PandoraBox-ralink-mt7620-phicomm-k2-2017-01-03-git-6c24a7a-squashfs-sysupgrade(此固件只适用斐讯K2,其它类型的路由器请自行百度下载固件)

1.2 刷Bootloader工具:路由器刷breed Web助手通用版v3.1

1.3 下载安装 Xsehll软件,可从此链接下载。下载后,安装此软件。

1.4 Nat6文件

刷机时一定要有一台带有线网卡的电脑。

2.刷入Breed Web 恢复控制台(以K2路由器为例)

所谓刷机,就是把原厂自带的软件给刷掉,为此需要先刷入类似于Bootloader之类的东西。此处需要下载1.2中的工具,关于个工具的具体介绍,有兴趣的可移步此处看原作者介绍:【2017-06-13】AR/QCA/MTK Breed,功能强大的多线程 Bootloader。这个软件也支持其它路由器的刷机,不过没试过。下载好软件后,将压缩包完全解压到一个文件夹下。

3. 刷入PandoraBox固件

路由器设置

下面主要是路由器中Ipv6的设置,至于管理员密码,无线密码、名称之类的怎么设置都很简单,就不再贴了。

确保路由器能上网后,再进行下面的操作


对于其它的Openwrt固件来说,只要Wan6口能获得Ipv6地址并且Ipv6组件未被精简的话,就可以使用下面的方法本配置Nat6,不过经过测试,Wan6口必须设置如下,才能被分配到Ipv6地址。

Wan6口设置

正常Ipv6地址的开头是2001,我这个图片是二级路由器,所以地址开头有些奇怪。

注意,在 网络->接口中,一定要确保全局网络选项中的那个IPv6 ULA前缀不能为空,如果你的没有,就把图片中的照抄下来吧。如果是二级路由器,要确保不能跟一级路由器的相同。

image.png

下面的设置需要使用Xshell软件,如果有一定的Linux基础,使用起来会比较方便,如果没有,也没关系,都是比较简单的操作,对着教程操作就好。

下面主要是要配置Nat6,Ipv6按道理应该是不需要Nat的,可是不知道是自己设置有问题,还是学校的Ipv6比较奇怪,其它设置一直没能成功。如果有其它方法成功的,欢迎跟贴指出。Nat6配置主要参考此教程:【转载】 通过openwrt的NAT6转发,使后端设备获得ipv6网络。在此,对原作者表示感谢。
以下涉及代码的,均需要在Xshell中输入。

opkg update
opkg install kmod-ipt-nat6

运行示例(之后不再给出Xshell界面)

-
uci set network.globals.ula_prefix="$(uci get network.globals.ula_prefix | sed 's/^./d/')"
uci commit network
uci set dhcp.lan.ra_default='1'
uci commit dhcp
touch /etc/init.d/nat6
vi /etc/init.d/nat6

为了方便,还是把Nat6 文件中的内容贴出来吧,具体如下

#!/bin/sh /etc/rc.common
# NAT6 init script for OpenWrt // Depends on package: kmod-ipt-nat6

START=55

# Options
# -------

# Use temporary addresses (IPv6 privacy extensions) for outgoing connections? Yes: 1 / No: 0
PRIVACY=1

# Maximum number of attempts before this script will stop in case no IPv6 route is available
# This limits the execution time of the IPv6 route lookup to (MAX_TRIES+1)*(MAX_TRIES/2) seconds. The default (15) equals 120 seconds.
MAX_TRIES=15

# An initial delay (in seconds) helps to avoid looking for the IPv6 network too early. Ideally, the first probe is successful.
# This would be the case if the time passed between the system log messages "Probing IPv6 route" and "Setting up NAT6" is 1 second.
DELAY=5

# Logical interface name of outbound IPv6 connection
# There should be no need to modify this, unless you changed the default network interface names
# Edit by Vincent: I never changed my default network interface names, but still I have to change the WAN6_NAME to "wan" instead of "wan6"
WAN6_NAME="wan6"

# ---------------------------------------------------
# Options end here - no need to change anything below

boot() {
        [ $DELAY -gt 0 ] && sleep $DELAY
        logger -t NAT6 "Probing IPv6 route"
        PROBE=0
        COUNT=1
        while [ $PROBE -eq 0 ]
        do
                if [ $COUNT -gt $MAX_TRIES ]
                then
                        logger -t NAT6 "Fatal error: No IPv6 route found (reached retry limit)" && exit 1
                fi
                sleep $COUNT
                COUNT=$((COUNT+1))
                PROBE=$(route -A inet6 | grep -c '::/0')
        done
 
        logger -t NAT6 "Setting up NAT6"
 
        WAN6_INTERFACE=$(uci get "network.$WAN6_NAME.ifname")
        if [ -z "$WAN6_INTERFACE" ] || [ ! -e "/sys/class/net/$WAN6_INTERFACE/" ] ; then
                logger -t NAT6 "Fatal error: Lookup of $WAN6_NAME interface failed. Were the default interface names changed?" && exit 1
        fi
        WAN6_GATEWAY=$(route -A inet6 -e | grep "$WAN6_INTERFACE" | awk '/::\/0/{print $2; exit}')
        if [ -z "$WAN6_GATEWAY" ] ; then
                logger -t NAT6 "Fatal error: No IPv6 gateway for $WAN6_INTERFACE found" && exit 1
        fi
        LAN_ULA_PREFIX=$(uci get network.globals.ula_prefix)
        if [ $(echo "$LAN_ULA_PREFIX" | grep -c -E "^([0-9a-fA-F]{4}):([0-9a-fA-F]{0,4}):") -ne 1 ] ; then
                logger -t NAT6 "Fatal error: IPv6 ULA prefix $LAN_ULA_PREFIX seems invalid. Please verify that a prefix is set and valid." && exit 1
        fi
 
        ip6tables -t nat -I POSTROUTING -s "$LAN_ULA_PREFIX" -o "$WAN6_INTERFACE" -j MASQUERADE
        if [ $? -eq 0 ] ; then
                logger -t NAT6 "Added IPv6 masquerading rule to the firewall (Src: $LAN_ULA_PREFIX - Dst: $WAN6_INTERFACE)"
        else
                logger -t NAT6 "Fatal error: Failed to add IPv6 masquerading rule to the firewall (Src: $LAN_ULA_PREFIX - Dst: $WAN6_INTERFACE)" && exit 1
        fi
 
        route -A inet6 add 2000::/3 gw "$WAN6_GATEWAY" dev "$WAN6_INTERFACE"
        if [ $? -eq 0 ] ; then
                logger -t NAT6 "Added $WAN6_GATEWAY to routing table as gateway on $WAN6_INTERFACE for outgoing connections"
        else
                logger -t NAT6 "Error: Failed to add $WAN6_GATEWAY to routing table as gateway on $WAN6_INTERFACE for outgoing connections"
        fi
 
        if [ $PRIVACY -eq 1 ] ; then
                echo 2 > "/proc/sys/net/ipv6/conf/$WAN6_INTERFACE/accept_ra"
                if [ $? -eq 0 ] ; then
                        logger -t NAT6 "Accepting router advertisements on $WAN6_INTERFACE even if forwarding is enabled (required for temporary addresses)"
                else
                        logger -t NAT6 "Error: Failed to change router advertisements accept policy on $WAN6_INTERFACE (required for temporary addresses)"
                fi
                echo 2 > "/proc/sys/net/ipv6/conf/$WAN6_INTERFACE/use_tempaddr"
                if [ $? -eq 0 ] ; then
                        logger -t NAT6 "Using temporary addresses for outgoing connections on interface $WAN6_INTERFACE"
                else
                        logger -t NAT6 "Error: Failed to enable temporary addresses for outgoing connections on interface $WAN6_INTERFACE"
                fi
        fi
 
        exit 0
}
chmod +x /etc/init.d/nat6
/etc/init.d/nat6 enable
uci set firewall.@rule["$(uci show firewall | grep 'Allow-ICMPv6-Forward' | cut -d'[' -f2 | cut -d']' -f1)"].enabled='0'
uci commit firewall
vi /etc/sysctl.conf

然后按a键进入编辑状态,按键盘上的上,下,左,右四个箭头键进行移动(不要使用鼠标)
把文件中相关内容改为以下内容,没有的话就添加,大概说接收广播并开启ipv6转发

net.ipv6.conf.default.forwarding=2
net.ipv6.conf.all.forwarding=2
net.ipv6.conf.default.accept_ra=2
net.ipv6.conf.all.accept_ra=2

修改完成后,按 Esc 键,再输入 :wq (冒号也要输的),即可保存并退出Vi编辑器状态。

vi /etc/firewall.user

然后按 a 键进入编辑状态
移动光标到文件未尾,按回车后,添加以下语句

ip6tables -t nat -I POSTROUTING -s $(uci get network.globals.ula_prefix) -j MASQUERADE

修改完成后,按 Esc 键,再输入 :wq ,即可保存并退出Vi编辑器状态。


下面配置Ipv6 hosts,使相关的网站(Google,Wiki,Youtube,Facebook等)走Ipv6通道

opkg update && opkg install wget
wget --no-check-certificate https://raw.githubusercontent.com/lennylxx/ipv6-hosts/master/hosts  -O /etc/host_ipv6
0,1,11,21,31,41,51 * * * * /usr/bin/set_kernel_timezone >/dev/null 2>&1
*/20 * * * * echo 3 > /proc/sys/vm/drop_caches
30 4 * * * sleep 1m && touch /etc/banner && reboot -f 2>/dev/null  ###定时重启 
*/30 * * * * ping -c 4 www.baidu.com 2>/dev/null  ###Ping_baidu 
00 3 * * * wget --no-check-certificate https://raw.githubusercontent.com/lennylxx/ipv6-hosts/master/hosts  -O /etc/host_ipv6 2>/dev/null  ###更新Ipv6 Hosts 

注意,要在最后一行处按回车键,加入空行。

成功后的结果图:

网络状态 Ping测试

当然,手机也是可以使用的。 手机贴图比较麻烦,就不上图了。

更新日志

2017年7月23日:完成第一版

另外,最近嘉定校区教学区的Ipv6好像不能用了,主要问题是Wan6口能获得Ipv6地址,但是却Ping不通ipv6网关(不知道是不是只有我有个问题,目前在汽车学院和E楼,ipv6都没法正常使用,寝室能正常使用),跟网管打了多次电话,但是感觉是被忽视了,毕竟Ipv6用的人少。。。有需求的同学,可以打电话问问,估计打的人多了,网管那边就会查问题了吧。

2017年7月25日:完成第二版

今天下午,迩楼的Ipv6突然通了,于是就加了一些关于Ipv6使用的介绍。

2017年9月:更新第三版

更新一下排版,添加了一些注意事项。

2017年11月9日:更正宁远馆Ipv6速度问题

上一篇下一篇

猜你喜欢

热点阅读