跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 如何只给路由器后的某个设备单独分配 IPv6 地址
未分類
4 5 月 2020

如何只给路由器后的某个设备单独分配 IPv6 地址

如何只给路由器后的某个设备单独分配 IPv6 地址

資深大佬 : swiftg 55

移动宽带没有公网 IPv4,有 IPv6 地址,外网可以直接入站访问家里的 nas,但是 IPv6 出站访问外网的线路质量就特别差,好像总共出国带宽只有 20G 。偏偏电脑和手机在获取 IPv6 地址后都会优先使用 IPv6 访问,造成访问比如 V2EX 速度很慢。

不想手动在每个设备上配置 IP,有些设备还不能手动配置。请问有没有办法可以在路由器上设置只给某个设备分配 IPv6 地址。路由器是 openwrt 和 padavan

大佬有話說 (37)

  • 資深大佬 : zro

    openwrt 装个 Polipo,需要 IPv6 就接到 Polipo 代理。。

  • 資深大佬 : zro

    顺便把 openwrt 的 dhcpv6 关掉。。

  • 資深大佬 : lns103

    直接在路由器上用 smartdns,开启 SOA,屏蔽 ipv6 的地址解析,而且外部 ipv6 的访问不受影响。
    ps:电信的 ipv6 出国更恶心,大部分都绕欧洲,cf 美国可以直连,但是也辣鸡得不行

  • 主 資深大佬 : swiftg

    @lns103 谢谢,smartdns 这个我也想到了,但这不是完美的方案,nas 上我还是需要正常解析 IPv6 的 dns,包括其他设备,有时需要 dig nslookup 调试些东西

    @zro 谢谢,路由器上端口转发到内网我也想到了,我用的 socat,实际测试性能有损失。直接访问 nas 的 IPv6 地址 15-20MB/s 跑满宽带,socat 端口转发到 nas 的内网 IP 只有 10MB/s 。而且我还想 nas 能出站访问外网的 IPv6 地址

  • 資深大佬 : zro

    @swiftg #4 好久好久之前,Google 见过将 PPPoE 的 v4/v6 分离的,把 v6 数据包 drop 掉给其他设备,好像是这样子,具体记不太清。。

  • 資深大佬 : updateing

    可以考虑关掉 SLAAC 只用 DHCPv6,然后禁止 DHCPv6 动态分配(只允许手动添加的 static lease ),再把 NAS 加到 static lease.

    我记得 OpenWrt 上这么做好像得魔改 odhcpd,或许用 dnsmasq 做 DHCPv6 服务器会更可行?

  • 資深大佬 : qingxi

    要么你给 nas 单独设置 DNS,其他内网

  • 資深大佬 : qingxi

    @qingxi 其他内网 DNS 屏蔽 ipv4 解析

  • 主 資深大佬 : swiftg

    @updateing 谢谢,没找到禁用动态 DHCPv6 的地方。我的思路是想在防火墙把内网的 DHCPv6 流量全部 reject,再单独允许 nas 的 DHCPv6,但弄了半天 reject 规则不起作用,DHCPv6 还是在所有内网设备上都能工作。dnsmasq 我明天研究研究

  • 主 資深大佬 : swiftg

    @qingxi 单独 dns 这个是个不错的曲线备选方案,但我还是想弄个完美的解决办法

  • 資深大佬 : jim9606

    没实践过的方案

    openwrt 为只使用 V4 设备单独开一个接口和防火墙区域

    交换机页面为接入 LANV4 的网口划分独立 VLAN (例如 VLAN3: eth0-tagged, LAN4-untagged,其余为 off,产生交换机 eth0.3,如果接 eth1 就是 eth1.3 )

    防火墙创建 LANV4 区域,接口创建的 LANV4,另外分一个地址池,例如 192.168.2.1/24,该接口关闭 RA 、NDP 、DHCPv6,为加入的物理接口创建桥接(上面的 eth0.3,第二个 SSID )

    LANV4 防火墙的转发设置跟 LAN 保持一致(出 /入 /转发为允许,允许目标区域 LAN+WAN,允许源区域 LAN )

    windows 系统可以考虑修改策略优先 ipv4
    ( https://support.microsoft.com/zh-cn/help/929852/guidance-for-configuring-ipv6-in-windows-for-advanced-users)

    linux 系统可修改 /etc/gai.conf 实现

  • 主 資深大佬 : swiftg

    @jim9606 谢谢这么详细的方案,可惜我的情况复杂了点,我路由器 4 个 LAN 口只保留了一个,下面接的一个 24 口交换机,所有有线设备都是接的这个交换机。剩下的 3 个 LAN 口都配置成了 WAN 口使用,接了两条宽带和 IPTV 。另外老家的 padavan 没有配置 switch 的功能

    主要是移动设备不方便手动配置和调整优先级

  • 資深大佬 : Archeb

    我认为用 iptables 屏蔽特定包可以做到这一点

  • 資深大佬 : hand515

    联通的 ipv6 感觉也是绕美国,traceroute -6 看,先到美国,再到香港

  • 主 資深大佬 : swiftg

    @Archeb 我也是这么想的,但是我尝试屏蔽内网所有的 DHCPv6 流量( udp 546,547 端口),但是没有成功,设备照样可以获取 IPv6 地址。

    可否指导下怎么设置防火墙?

  • 主 資深大佬 : swiftg

    @hand515 三家的 IPv6 出口带宽都太小,V 站联通走日本,但是延迟炸裂,移动走香港,电信走美国,丢包都很严重,总之出国根本没法使用

  • 資深大佬 : cwbsw

    @swiftg RA 关了吗?

  • 主 資深大佬 : swiftg

    @cwbsw 谢谢你的提醒,我发现之前屏蔽了 DHCPv6 后客户端获取的 IP 果然是通过 RA 获取的。

    我尝试关闭 RA,可是 nas 虽然有 DHCPv6 获取的 IPv6 地址,却不能上网了,出站都是 Network is unreachable

  • 資深大佬 : updateing

    @swiftg RA 最好不要关闭, 它是获取默认路由的方式之一。只需要关闭 SLAAC 就足够了,就是 RA 里面对应前缀下的 Autonomous 位。这个用原版的 odhcpd 就可以设置,应该是页面上把 Router Advertisement 设置成 Stateful-only 就行.

  • 資深大佬 : zro

    想到一个:OpenWRT 不给 lan 分配 v6,然后再搭个 OpenVPN 或 WireGuard 之类的,NAS 就能绕个弯拿到 v6 地址了。。虽然在内网间搭个 VPN 是夸张了点~

  • 資深大佬 : cwbsw

    @swiftg 手动添加默认路由。
    ip -6 r add default via fe80:*** dev ***

  • 資深大佬 : king050203

    可以用 ebtables 过滤 ipv6

  • 資深大佬 : mandymak

    @swiftg 更换主路由为 routeros,openwrt 改为旁路由,routeros 支持把 ipv6 配到独立的 bridge 。

  • 主 資深大佬 : swiftg

    @updateing openwrt 里没有 stateful,我猜应该就是对应的 server mode,无论设置为 server mode 还是 relay mode,局域网设备都可以自动获取 IPv6 地址。搜索资料发现 RA 走的 ICMPv6,我就在防火墙把所有 ICMPv6 包 DROP 了,然后单独 ACCEPT nas 的。现在看应该是没问题了。luci 里防火墙设置规则并且拖到最上面不起作用,必须要 ssh 进去手动输 ip6tables 命令才行。

    “`
    ip6tables -I INPUT -p udp –dport 546 -j DROP
    ip6tables -I INPUT -p udp –dport 547 -j DROP
    ip6tables -I INPUT -p icmpv6 -j DROP
    ip6tables -I INPUT -p udp -m mac –mac-source NAS_MAC_ADDRESS –dport 546 -j ACCEPT
    ip6tables -I INPUT -p udp -m mac –mac-source NAS_MAC_ADDRESS –dport 547 -j ACCEPT
    ip6tables -I INPUT -p icmpv6 -m mac –mac-source NAS_MAC_ADDRESS -j ACCEPT
    “`

  • 主 資深大佬 : swiftg

    @cwbsw 谢谢。我路由器关闭 RA,nas 上手动添加默认 IPv6 路由,还是 Network is unreachable,ip -6 r add default via fe80::6238:e085:ff05:c9d7 dev ens3,和 RA 自动获取的是一模一样的

  • 資深大佬 : cwbsw

    @swiftg 奇怪了,我 Windows 机器就可以这么干,路由器不开 RA,然后手动配地址和路由。

  • 資深大佬 : cwbsw

    @swiftg 想了下,最好应该还是只开 RA,禁用 DHCPv6,DROP 非 NAS 的 ICMP6 。

  • 資深大佬 : LGA1150

    关闭 SLAAC:
    uci set dhcp.lan.ra_slaac=0
    uci commit dhcp
    /etc/init.d/odhcpd restart
    RA 还是要开的

  • 資深大佬 : cwbsw

    不对,不行,这样还是会广播 RA,光 DROP 入站不行。

  • 資深大佬 : LGA1150

    补充 #28
    只有 snapshot 里的 odhcpd 支持 ra_slaac 设置,19.07 或 18.06 都不行

  • 資深大佬 : helldiablo

    ‘!~7

  • 資深大佬 : helldiablo

    ‘!~7i6

  • 資深大佬 : cwbsw

    @LGA1150
    snapshot 的话,只需 luci 里设置 statefull-only 即可,抓包看 RA 里已经没有 Auto Flag 。
    综上,主需要在 luci 设置 statefull-only,DROP 掉非 NAS 的 ICMP6 和 UDP 547 入站。

  • 主 資深大佬 : swiftg

    @cwbsw 十分感谢!我现在用的 openwrt 19.07 和 padavan 。这样手动设置防火墙后貌似可以达到我想要的效果了,openwrt 上的其他设备偶尔还会获得 IPv6 地址,搞不懂为什么,可能防火墙重启了?

    openwrt 上设置为
    Router Advertisement-Service: Server Mode
    DHCPv6-Service: Server Mode
    NDP-Proxy: Disabled
    DHCPv6-Mode: Stateful only

    padavan 上设置为
    WAN: Stateless RA
    通过 DHCP 获取内网 IPv6 地址:是
    启用 LAN 路由器广播: 是
    启用 LAN DHCPv6 服务器: Stateful

    两个路由器上都用的同样的规则
    ip6tables -I INPUT -p udp –dport 547 -j DROP
    ip6tables -I INPUT -p icmpv6 -j DROP
    ip6tables -I INPUT -p udp -m mac –mac-source NAS_MAC_ADDR –dport 547 -j ACCEPT
    ip6tables -I INPUT -p icmpv6 -m mac –mac-source NAS_MAC_ADDR -j ACCEPT

  • 資深大佬 : cwbsw

    @swiftg 规则加到 /etc/firewall.user 里重启就不会失效。

    ip6tables -A input_lan_rule -i br-lan -p ipv6-icmp -m mac ! –mac-source *** -j DROP
    ip6tables -A input_lan_rule -i br-lan -p udp –dport 547 -m mac ! –mac-source * -j DROP

    可能是 30 说的原因,19.07 的 statefull-only 实现有问题。可以抓包确认一下。

    prefix info option (3), length 32 (4): 240e:***::/64, Flags [onlink], valid time 2251s, pref. time 2251s

    Flags 那一项不应该有 Auto 。

  • 主 資深大佬 : swiftg

    @cwbsw 我是写到 firewall.user 的,可能之前手动重启的间隙获取的,目前几个小时过去了没有任何问题了。唯一的小瑕疵,WAN 口也不能获取地址,路由本身不能监听 IPv6 端口了

  • 主 資深大佬 : swiftg

    @swiftg #36,我自己规则没有指定 lan 接口,按照 @cwbsw 的规则加上-i br-lan,WAN 口就也可以获取 IPv6 地址了。

    自此问题完美解决,感谢上各位大佬的耐心解答指导

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具