2017-05-01

一直钟爱有线网络的速度与激情, 直到朋友们纷纷要求手机连 wifi, 直到用了轻薄的联想 yoga 笔记本, wifi 开始走进生活。 之前使用华为 HG8240 光猫拨号上网, 外加一只迷你无线路由桥接有线网络做 wifi, 但总感觉访问局域网资源不够流畅, 由于决定换一个千兆无线路由, 购买了 TP-LINK WDR6500 千兆版路由器。 商品链接: https://item.jd.com/3342186.html

稍加摸索得知此路由器设计的目标应用场景如下:

路由器内部有外网 WAN 和内网 LAN 两个端口, 内网设备 (包括 wifi 和有线连接) 通过 NAT 访问外网资源。

路由器出厂设置默认分配了内网 IP 并开启了 DHCP 和 DNS 服务, PC 等网络设备连接上路由器 LAN 端后, 访问 http://tplogin.cn/ 时自动解析到路由器内网 IP (通常为 192.168.1.1), 即进入路由器设置界面。 这是个设计得比较人性化的地方。

路由器设置中 "上网设置" 即是外网 WAN 口设置, 通常使用宽带账号拨号上网。

该路由器有两个功能引起了我的注意, "无线桥接" 和 "DDNS"。

"无线桥接" 当前没有需求, 具体可参考官方文档: [TL-WDR6500 V5-V6] 无线桥接(WDS)如何设置 。 初步了解要使用 DDNS 必须配置 WAN 口上网。

TP-LINK WDR6500 路由没有光纤入口, 只能从 HG8240 接入 WAN 口连接。 HG8240 在 WAN 设置取消绑定 LAN 端口, LAN 设置取消选择 LAN 端口, 对应的 LAN 口接入的设备即能使用宽带拨号上网。

这样设置接入 WDR6500 WAN 端口后可以拨号上网, 但是 HG8240 和 WDR6500 的内网却无法互通, 逻辑结构如下:

一个想法是拉一根网线将两个 LAN 打通, WDR6500 做主路由器, HG8240 做从交换机。

06-tplink-wan-lan.png

由于 HG8240 在客厅, WDR6500 在卧室, 这样卧室就需要拉两根网线到 HG8240, 一根 WAN 入口, 一根 LAN 出口。 可是卧室却只能接通一根网线, 要么再拉一根网线爬墙进来, 这样就把房间搞得很乱很不方便。

另一个办法就是两者交换一下, HG8240 做主路由器, WDR6500 做从交换机, 这样就可以省一根网线。 此时没有使用 WDR6500 的 DNS 了, 访问管理界面需要输入 IP 地址, 而不能使用 tplogin.cn 这个域名了。

随后看到官方文档也描述了这种用法: [TL-WDR6500 V5-V6] 接在其他路由器下怎么使用 。 同时官方文档也指出, 此时 TP-LINK ID 无法登录, 因此 DDNS 也无法使用。 究其原因, 是路由器只使用 WAN 口访问外网, 尽管此时 LAN 已经可以访问外网了。

将 HG8240 的 LAN 接到 WDR6500 的 WAN 口, 使其通过 HG8240 访问外网:

此时 WAN 不能拨号, 可配置 IP 作为 HG8240 LAN 的一员。

之后 DDNS 果然可以工作了, 并且其绑定的 IP 是 HG8240 真实外网 IP (而不是 WDR6500 WAN 口配置 IP)。

此时 WDR6500 的 LAN 端依然只能在另一个内网通过 NAT 上网 (其设计的工作场景即是如此)。 并且 NAT 的访问是单向的, HG8240 的内网不能访问 WDR6500 的内网。 有没有办法配置路由规则打通两个 LAN 的相互访问呢, 摸索了下两个路由器都不支持自定义路由规则配置。 并且即使打通了, 本质上还是两个 LAN, 不能使用 zeroconf 或 windows 局域网名互相访问, 还是有不方便。

HG8240 的 LAN 还是接回 WDR6500 的 LAN 。 再想到, 既然 WDR6500 路由器不会自动使用 LAN 访问外网, 能不能桥接其 WAN 和 LAN, 手动配置 WAN 通过 LAN 访问外网呢。

WDR6500 路由器的 WAN 口虽然桥接到了 LAN 口, 路由器却限制 WAN 口与 LAN 口不能配置同一个子网的 IP, 同样这与其 NAT 使用场景的设计有关。 若将 WAN 口配置另一个子网 IP, 则 WAN 口还是无法上网, 原因是虽然 WAN 口配置使用 HG8240 路由上网, HG8240 却无法路由 WAN 的子网 IP, 前面提到无法自定义路由规则。

一种解决办法是在 LAN 中为 WDR6500 WAN 口子网添加一个路由, 这个路由 NAT 到 HG8240 LAN 上网, DDNS 最终暴露出 HG8240 的公网 IP。

即同一个链路层两个 LAN, 其中 LAN2 又是一个 NAT 到 HG8240 LAN 的子 LAN。 经测试可行, 但如此复杂的结构只是为了让 WDR6500 的 WAN 能上网且跟 LAN 不在一个子网。

这时又想到, WDR6500 做从交换机时, DHCP 和路由规则都由 HG8240 决定, 属于 HG8240 的 LAN。 WDR6500 除了配置管理要通过 LAN 口 IP 访问外, 其 LAN 口配置其实已经无关紧要。 与其大费周折地给 WAN 换一个子网, 不如直接把 LAN 换一个子网 (这个子网能不能上网都无所谓), 这样就能省一个路由。

此时物理结构不变,HG8240 的 LAN, WDR6500 的 WAN 和 LAN 3 者链路层全部打通为一个大 LAN。 逻辑上 WDR6500 的 LAN 端配置为一个独立的小 LAN。 连接 LAN 的电脑默认通过 DHCP 加入大 LAN, 也可以手动配置加入小 LAN。

最终配置即是 WDR6500 做从交换机, 并桥接其 WAN 和 LAN, 将其 WAN 口配置为 HG8240 LAN 的一个成员。 WDR6500 WAN 配置上网后,同时使路由器正确显示 WAN 上网状态。

当需要访问 WDR6500 的管理界面时, 只需要给当前机器加一个 WDR6500 LAN 子网的 IP 即可。

sudo ip addr add dev br0 192.168.1.30/24