为了用 IPv6 访问一些机器学习的相关教程,最近又搞了一下路由器!
准备工作:
- 支持刷固件的路由器;
- 能够正常访问的镜像源;
- WinSCP(官网下载即可)
- 能连 SSH 的东西(推荐使用 PuTTY 本人使用 Linux 子系统,别问为什么!)
- 良好的心态;
- 这篇教程。
下载对应版本的 OpenWRT 固件(我用的是潘多拉17.09)刷路由器系统,完成后按以下方法配置(文章内部代码已经按照当前校园网络环境 (XJTU) 进行修改,可以无视相关解释直接将其复制到相应目录):
路由器刷机
此部分参考各厂商相应教程,不过听说有一个叫 breed 的固件,刷了以后好像路由器就不容易变砖了!
更改路由器的默认镜像源以及准备工作
使用 SSH 连接路由器,默认情况下为:
# SSH
ssh [email protected]
密码为admin
,如果弹出一个潘多拉的界面,就说明连上了!
使用 WinSCP 访问路由器路径/etc/opkg
按如下形式修改文件distfeeds.conf
:
# WinSCP
src/gz 17.09_core http://pandorabox.leoslion.top/pandorabox/17.09/targets/ralink/mt7620/packages
src/gz 17.09_base http://pandorabox.leoslion.top/pandorabox/17.09/packages/mipsel_24kec_dsp/base
src/gz 17.09_lafite http://pandorabox.leoslion.top/pandorabox/17.09/packages/mipsel_24kec_dsp/lafite
src/gz 17.09_luci http://pandorabox.leoslion.top/pandorabox/17.09/packages/mipsel_24kec_dsp/luci
src/gz 17.09_mtkdrv http://pandorabox.leoslion.top/pandorabox/17.09/packages/mipsel_24kec_dsp/mtkdrv
src/gz 17.09_newifi http://pandorabox.leoslion.top/pandorabox/17.09/packages/mipsel_24kec_dsp/newifi
src/gz 17.09_packages http://pandorabox.leoslion.top/pandorabox/17.09/packages/mipsel_24kec_dsp/packages
顺便一提,WinSCP 可以直接启动 PuTTY !还蛮好用的!
OpenWRT 路由器作为 IPv6 网关的配置
OpenWRT 是一种嵌入式 Linux 操作系统,广泛应用于家用路由器/网关。本文将介绍几种在清华校园网中,使用 OpenWRT 路由器为接入设备提供 IPv6 服务的配置方法。本文内容综合有多位贡献者,如有疑问、建议,可以参与内容讨论。
IPv6 NAT
虽然 IETF 的设计中,IPv6 不再有 NAT (网络地址转换), 但 Linux 内核从 3.7 版本开始实现了 IPv6 的 NAT。早年也曾有过 NAT66 等非官方项目,但缺乏维护,目前已经不再推荐使用。OpenWRT IPv6 NAT 配置部分,由 @Blaok 贡献。
零: 检查内核模块和有用的软件包
# SSH
opkg install ip6tables kmod-ipv6 kmod-ipt-nat6
opkg install kmod-ip6tables kmod-ip6tables-extra
opkg install luci-proto-ipv6 iputils-traceroute6
kmod
开头的内核模块一般无法通过 opkg 直接安装,其他软件包虽然可以通过opkg install
直接安装,但会多占路由器存储空间,推荐在编译固件时就将这些软件包都放入固件
上述软件包除kmod-ipv6
外并非必须。kmod-ipt-nat6
提供IPv6 NAT支持,ip6tables kmod-ip6tables kmod-ip6tables-extra
等提供 IPv6 防火墙,luci-proto-ipv6
为 LuCI 提供 IPv6 设置选项,iputils-traceroute6
为 IPv6 提供 traceroute 功能(mtr
是个不错的支持双栈的traceroute
替代品,如果路由器存储空间够大的话)
总之安装 ip6tables 和 kmod-ipt-nat6。
# SSH
opkg update
opkg install ip6tables
opkg install kmod-ipt-nat6
壹: 打开 OpenWRT IPv6 私网地址分配
OpenWRT 默认会分配 IPv6 私网地址,在Network->Interfaces
页面底下有个Global network options
,IPv6 ULA-Prefix
这里应该有一个随机的fd
开头的/64
地址,LAN客户端应该能自动获得这个地址范围内的 IPv6 地址,DHCPv6 和 SLAAC 默认都开了
为了让 OpenWRT 后面的设备始终能够获得 IPv6 网关,需要在Network->Interfaces->LAN
下方的DHCP Server
部分的IPv6 Settings
部分,勾选Always announce default router
。否则,由于默认分配的是私网地址,OpenWRT 不会向下游设备公布 IPv6 默认路由(即网关),可能导致路由器上 IPv6 连通但下游设备不通的情况 (感谢@terro提醒)
使用 WinSCP 更改/etc/config/network
文件内容,在config globals 'globals'
修改(添加)以下内容:
option ula_prefix 'AAAA:BBBB:CCCC:DDDD::/64'
更改/etc/config/network
文件内容,在config interface 'wan'
修改(添加)以下内容:
option peerdns '0'
option dns '2001:4860:4860::8844 2001:4860:4860::8888'
更改/etc/config/dhcp
文件内容,将config dhcp 'lan'
那一栏改为以下内容:
config dhcp 'lan'
option interface 'lan'
option start '100'
option limit '150'
option leasetime '12h'
option dhcpv6 'server'
option ra 'server'
option ra_management '1'
option ra_default '1'
贰: 打开 IPv6 NAT
客户端有了正确的地址以后,需要在路由器上打开 IPv6 NAT。OpenWRT 默认的防火墙配置不会管 IPv6 的 NAT 表,可以在/etc/firewall.user
里面加上
# WinSCP
WAN6=pppoe-wan
LAN=br-lan
ip6tables -t nat -A POSTROUTING -o $WAN6 -j MASQUERADE
ip6tables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
ip6tables -A FORWARD -i $LAN -j ACCEPT
WAN6 和 LAN 分别改成外网 IPv6 和内网网卡 ( interface ) 的名字,注意不是防火墙区域 ( zone ) 的名字,也不是 LuCI 里面Network->Interfaces
里面看到的名字,而是ifconfig
看到的名字
叁: 正确配置网关
在路由器上ip -6 route
看一下自己的默认网关。如果获得的是
default from 2001:250:x:x::/64 via fe80::x:x:x:x dev eth0 proto static metric 512
这样坑爹的网关,在转发 NAT 包的时候会有问题,需要把去掉from 2402:f000:x:x::/64
这一部分的以后的默认路由添加到路由表中。可以新建一个/etc/hotplug.d/iface/99-ipv6
,它的内容是
# WinSCP
#!/bin/sh
[ "$ACTION" = ifup ] || exit 0
iface=wan
[ -z "$iface" -o "$INTERFACE" = "$iface" ] || exit 0
ip -6 route add `ip -6 route show default|sed -e 's/from [^ ]* //'`
logger -t IPv6 "Add IPv6 default route."
这里iface
是 LuCI 里面Network->Interfaces
里面看到的名字,一般叫 wan6 。这个脚本的意思是在 wan6 起来以后读取默认网关,把带 from 的内容去掉,再加到系统路由表里。记得
# SSH
chmod +x /etc/hotplug.d/iface/99-ipv6
参考资料:
在 OpenWrt 上配置原生 IPv6 NAT
OpenWRT 路由器作为 IPv6 网关的配置
可以正常访问的镜像源