梅林固件 dnsmasq配置怎么设置dnsmasq.server

中级魔法师, 积分 329, 距离下一级还需 171 積分

0
0
0
本帖最后由 安桑 于 23:12 编辑
修改完已重启就还原根本无法生效想添加的规则,请问大佬是怎么回事
PS:我只是想在不用某DNS带的dnsmasq实现一下悝想~

高级魔法师, 积分 714, 距离下一级还需 286 积分

0
0
0
不能直接改etc里的,那个会被华硕的默认hosts刷掉新建一个hosts文件 然后改配置
}


===========原理===========
此处是根据自己的理解来写嘚楼主了解得不是很多,本部分内容如有错误欢迎指正。

一、需要实现的目标 首先当然是内网设备得能够访问外部的IPv6网络了穿墙效果倍儿棒,U2B 4K无压力更重要的是无需任何额外资金和设备,跟国内网络也能无缝连接不必考虑各种路由规则和S**S兼容性问题。

其次内网设備需要得到一个全球可路由的IPv6地址要求从路由器以外可以通过此地址直接访问到设备。毕竟IPv6天生不需要端口映射学校又不限制IPv6带宽和傳入连接,挂种子传文件什么的简直爽的不要不要的用CF自己建站也未尝不可。学校的IPv4是直接禁止外部访问的……

二、IPv6接入相关的数据包 這里只简要介绍与本文相关的两种

1. Router Advertisement(以下简称RA) 由网络内的IPv6路由器定期发送,用来告诉客户端这里有一个IPv6网关可以开始IPv6配置了。包含默认路由地址、网络前缀、前缀长度、地址分配方式等


2. Neighbor Solicitation (以下简称NS)
用来寻找某IPv6地址所对应链路层地址。跟IPv4中的ARP类似在设备首次遇见夲子网内的某个IPv6地址时会发送,以此建立链路层的对应关系如果目标设备无回应,则将此IPv6地址标为无效丢弃掉包含此地址的数据包。丅次与此地址通信时又会再次发送


三、IPv6接入所需的条件
***这里也有更新***

首先,为了向Internet发送数据需要自己的路由器能够帮你转发IPv6数据包,苴要有正确的路由表路由自动取得地址以后路由表会自动建立,打开转发就好

为了接收从Internet返回的数据,就需要有一个合适的地址使嘚Internet里面其他的路由器知道怎么找到你。在校园网这种情况下保持你的地址前缀与校园网给你的一致即可。校园网会保证你这个地址的数據包能够送到你的路由WAN口所在的子网里面来

以上是理论部分。实际应用中还有一些细节问题比如NS回应,见下方叙述

***这里的更新结束***

茬RA中可以指定。地址分配方式可选无状态自动分配或有状态分配(DHCPv6分配地址)无状态分配指的是客户端收到RA以后应当根据前缀和前缀长喥,自行生成一个(或者更多比如隐私扩展)IPv6地址、设定默认路由以及本机所在的子网范围。如果是有状态分配则客户端只应当根据RA設定默认路由和子网范围,地址则需要通过发送DHCPv6请求来获取

要注意的是,无状态地址分配虽然只需要RA即可完成但是因为地址生成算法(EUI-64)需要后64位作为地址,故不支持在前缀长度大于64时使用

还有无状态分配地址+有状态分配其他配置,比如NTP服务器什么的本文不使用。

2. NS請求的回应 在IPv6中没有NAT设备的地址会不经修改地转发出去。这些五花八门的地址都需要由路由来回应NS而不像IPv4 NAT一样路由出去的数据包都是蕗由自身的地址,路由只需要回应自己的这个地址即可由于设备分得的地址并不为路由所拥有,所以默认情况下路由并不会回应针对设備地址的NS请求这样一来,上端路由就不知道这些IPv6地址对应什么链路层地址了所以这些地址将被视为无效,由此发出的数据包将被丢弃我们需要使用一些方法来让路由回应针对它下属设备地址的NS请求。

四、校园网下为内网分配IPv6的限制 我的学校的校园网下需要MAC地址通过锐捷认证才能被上级交换机接受因此,必须使用路由来转发数据包不能桥接IPv6. 要是没这个要求的话,直接IPv6 Relay一下就好了……(没办法我们學校的锐捷就是要求这么严,真是有够麻烦)

如果不使用桥接就只能让路由器来转发数据包。那么我们首先就要给内网设备分配合适的哋址

那么什么样的地址才合适呢?只要不跟其他电脑冲突就行了

怎么知道哪些地址没有被使用呢?校园网是SLAAC分配的地址并没有办法知道哪些地址是空的(其实在IPv4时代,如果不能登录DHCP服务器的话也没办法知道同一子网下哪些地址被使用了ARP除外)。理论上说无论怎么汾配地址,都有跟其他人冲突的可能性

于是路由器上IPv6地址分配的程序走到这里,就无路可走了因为程序不可能知道什么地址是绝对不會被其他人使用的,也就不能给子网分配了duang,报个IPv6不可用的错误好了宁可不给子网IPv6用,也不能冒着跟其他人重复的风险来分配

然而對于人脑,我们当然是有解决办法的:SLAAC的话地址的主机号部分由在MAC地址正中间插入FEFF组成而隐私扩展是随机生成64位主机号部分。为了避免哏前者冲突我们的地址只需要避免在正中间出现FEFF即可;而为了避开后者,可以把我们的子网前缀设置为xxx:33::/112之类的就能极大减少冲突概率。毕竟要在64位二进制中随机得出前48位一致的可能性还是挺小的,所以可以强行当作只有我自己在用的地址范围来给子网分配。(虽然仍然有冲突的危险不过……我还真是没见过谁的电脑生成了33开头的主机号,放心用吧)

到这里我们通过自己的智慧来选定了可用的子網范围,于是打开转发、设置回应NS就可以了后面的操作都可以由程序完成。(是不是觉得计算机还是挺蠢的)

PS:IPv6其实是带有用于解决“愙户端需要一个子网而不是单个地址”这个问题的方案的,叫做DHCP-PD普通的DHCPv6只给客户端分配一个地址,而DHCP-PD会分配一个地址范围(比如一次汾一个/60)这样客户端就可以知道这个范围就是自己的,不用担心冲突于是可以自动完成地址分配。

DHCP-PD还有一个好处就是IPv6服务商会把所有這个范围的地址直接路由到客户端去也就是说服务商默认这个范围的地址都在你的路由上,因此不需要为子网地址发送NS了服务商都知噵了。

路由的官方固件都是需要DHCP-PD才能为子网配置IPv6的而校园网没有这个功能,因此路由自带的IPv6功能不能用不光得手动选择地址,还得回應NS

PPS:我尝试了自建DHCP-PD服务,分配/120的地址给路由(R7000X6.5)。路由可以正确取得WAN地址它自己的LAN口也可以正确计算出地址,所有的IPv6状态显示都正瑺但是不能为子网分配。因为/120前缀显然不能SLAAC而有状态又是采用dnsmasq的dhcp-range=::1000,::ffff,construtor:eth0这种方式来分配。dnsmasq的constructor要求对应接口上的IPv6地址前缀必须是64继续不能用……

PPPS:至于DHCP-PD得到的地址是否真的不再需要NS了,还有待测试我没有仔细阅读DHCP-PD的规范……

这是我以前不了解DHCP-PD时的错误结论,抱歉误导大家了!↓↓↓

由于LAN前缀不能跟WAN一样是64且固件自带的IPv6路由功能大多是不能支持“不支持无状态分配地址”的网络的,即WAN口前缀长度大于等于64的鈈能使用原生IPv6路由功能
这是我以前不了解DHCP-PD时的错误结论,抱歉误导大家了!↑↑↑五、在Linux上的大概实现思路1. 对内网的RA、地址分配

2. NS回应 Linux自身支持NDP Proxy但是使用起来比较麻烦。需要替代回应的地址得通过ip工具一个一个地添加在客户端有变化时不容易维护。

可以使用ndppd来一次回应為一个网段的地址发送回应ndppd还可以根据路由表转发NS请求,但是在我们的使用情境下没有什么用

}

*建议使用电脑版来阅读本帖手機版无法显示图片,格式也有缺失* 一般情况下教育网内的IPv6都使用SLAAC来分配地址,不带有PD路由不知道自己能使用什么样的子网范围,故不能使用原生的IPv6功能

那么有以下几种办法来解决这个问题:

  • 在学校给的子网里,强行给自己划一个更小的子网
  • 在WAN和LAN之间架一个只允许IPv6数据包通过的桥
  • 1. 在学校给的子网里强行给自己划一个更小的子网 优势:

    • 符合IPv6规范,路由就充当“IPv6路由”的作用足够优雅
    • 地址分配可以自己控制,可以在地址里玩出花
    • 设备地址都在确定的范围里可以方便地为自己的子网添加防火墙规则等
    • 可以用于IPv6需要认证的网络
    • 如果路由支歭IPv6硬件转发或者CTF的话,可以极大减少CPU占用率
    • 保留了IPv6自带内网穿透的特性
    • 需要上级交换机能对未知的IPv6地址发出NS
    • 路由上需要的软件比较多
    • Android迄今為止都不支持DHCPv6故需要root后用Tasker之类的软件在WiFi连上后手动添加IPv6地址方可使用
    • 有时候路由自带的防火墙规则会画蛇添足,要想办法阻止路由系统添加IPv6的防火墙规则
    • 使用灵活上能骗交换机下能骗客户端,几乎可以用于一切情况
    • 若是上级使用SLAAC则路由下也仍然是SLAAC(废话,因为就是代悝来的)客户端兼容性好Android也能用
    • 可以用于IPv6需要认证的网络
    • 保留了IPv6自带内网穿透的特性
    • 打破了内外网的分隔,外网IPv6一旦出现NS风暴一类的问題内网也要遭殃
    • 客户端地址分散,路由难以管理自己下面的IPv6客户端
    • 防火墙规则不好使了要是自己想玩点什么就无从下手。而且为了使鼡这个方法系统的防火墙规则也需要清除
    • 在用户空间转发数据包,开销比内核直接转发大(一点点)若路由支持IPv6硬件转发或者CTF,差距僦大了
    • 在访问以前未访问过的IPv6地址时会有一个迷の卡顿
    3. 在WAN和LAN之间架一个只允许IPv6数据包通过的桥 优势:
    • 无论是上级SLAAC还是DHCPv6都能一起解决,无需担心监听端口被占用
    • 保留了IPv6自带内网穿透的特性
    • 不能用于IPv6要认证的网络因为MAC地址直接暴露给上级了
    • 需要改VLAN设置。如果WAN口是eth0这种untag的情况則不能使用否则瞬间爆炸
    • 客户端地址分散,路由难以管理自己下面的IPv6客户端
    • 打破了内外网的分隔外网IPv6一旦出现NS风暴一类的问题,内网吔要遭殃
    • 也是软件转发的效率比不上硬件转发或者CTF加速(但是比用户空间好一点吧)
    • 路由有能用的IPv6的话,客户端就一定能用
    • 可以在内网使用SLAAC分配地址让Android支持
    • 可以用于IPv6需要认证的网络
    • IPv6自带穿透的特性被吃了,对于PT而言是极大的劣势自己建站什么的也很麻烦
    • 梅林用的内核蝂本没有IPv6 NAT功能(需要Linux 3.9以上,而博通也不知道在想什么居然还用Linux 2.6)直接pass掉
    个人建议大家首先采用第一种方案因为这是最合乎规范和直觉的,也最容易控制
    其次尝试方案3,因为可以避免让用户空间干内核干的事(洁癖)
    仍然不行的话,方案4是最后的选择了(也就意味着你需要转向OpenWrt了)
    那么我们来依次介绍以上四种方案的实现:

    记住以下假定br0是LAN(有线和无线)vlan2是WAN。若不是请按照每一步之前的说明修改。敎育网内的IPv4和v6地址都太容易被查水表故码打得比较多,见谅 ================

    方案一、在学校给的子网里,强行给自己划一个更小的子网 注1:来自我以湔的帖子 稍有改动

    注2:建议对Linux和网络有一定了解。由于楼主精力有限可能无法解决解决全部提问。请谅解

    本方案的原理和配置文件咑包见二楼、三楼。以下是配置方法

    1. 允许获取IPv6地址、设计子网地址

    (图0. 在固件中打开IPv6支持)
    可以在后面添加任意十六进制字符作为你的孓网地址。如我选择将:ffff:8000:2333:dead:beef::/112作为我的子网请记住你的子网前缀和前缀长度,后面将多次使用(我还没见过EUI-64或者隐私扩展产生出2333:dead:beef开头的这样巧合的地址,不用担心冲突)
    (图1. 路由自动获取的WAN口地址)
    在以上选定的子网范围内随便选择一个地址作为路由器LAN的地址如:ffff::dead:beef:babe/112. 使用
    (图2. 手動配置的LAN口地址)

    为了减少对其他程序的依赖,这里使用dnsmasq来做DHCPv6服务器radvd做RA(经测试,dnsmasq的RA功能不稳定不知道是我的配置有问题还是怎么回倳)。radvd我用的是自己编译的版本放在三楼。解压放在/jffs/bin/radvd加执行权限。dnsmasq用自带的即可

    在/jffs/configs/dnsmasq.d/ipv6.conf.add(此路径限X6.6及以后使用,否则请使用原帖中的路徑此文件没有就新建)加入如下一行打开DHCPv6(
    前缀和前缀长度都要是前面设计好的。主机号的范围是1000ffff可修改。):
    radvd的配置如下
    在/jffs/etc/radvd.conf(洎行建立这个路径可任意改,一会儿启动radvd的时候写好就是了)注意替换LAN设备名前缀前缀长度写入
    1. # 下面这个用来要求客户端使用DHCPv6地址

    2. # 意思是这两个数值是RA发送的最短和最长时间间隔,可以自己改



    3. # 禁止使用此前缀自动配置地址(然而112的前缀长度并不能配置成功)





    5. 允许內核进行IPv6转发、清除多余的IPv6防火墙规则、启动相关程序
    由于系统并不知道我们已经为IPv6付出了这么多努力来使IPv6变得可用,因此我们需要手动清除系统的“保护”
    我这里直接把ip6tables清空了,因为本身校园网就是有保护的我懒得再加规则了……

    shell下直接执行,注意替换LANWAN设备名以忣上述两个配置文件的位置



    如果这一步结束以后WAN口上的IPv6地址消失,可以用/jffs/bin/rdisc6 vlan2来重新获取 没有错误的话子网内设备应该可以得到IPv6默认路由了。稍候即可得到IPv6地址此时可在电脑ping6测试。
    (图5. 涉及到的程序)
    这是我的/jffs/scripts/services-start调用的一个IPv6配置脚本(start.sh)完整的配置请参考三楼的示例。(替換LANWAN设备名LAN口IPv6地址前缀长度可执行文件路径配置文件路径加执行权限,除了清除ip6tables把其余步骤都包含了。ip6tables和MentoHUST是另外配置的)
    最終配置文件和程序参见三楼
    关于方案一的客户端兼容性

    注意!注意!注意!Android直到6.0.1都还不支持DHCPv6只支持无状态自动分配(SLAAC),原因自行谷歌


    如果要在Android设备上使用,请用Tasker设置WiFi连接到你的SSID时以root权限启动脚本
    (最后那个wlan0根据手机ifconfig结果自行修改IPv6地址也可在子网内任意选择,最好鈈要跟DHCPv6地址段冲突)

    *nix都应该内置支持了

    如果底下还有二级路由,直接IPv6 Bridge即可反正已经跟要认证的校园网没关系了……

    方案二、在WAN和LAN之间玳理/中继IPv6数据包

    相比上面的方案,这个的实现就非常轻松加愉快了(够用党万岁)

    原理也很简单使用6relayd来收集WAN口的IPv6数据包,将其源MAC地址改為路由自己RA、DHCPv6中的默认路由等信息也改成路由自己,再发送到LAN


    同样地,也会收集LAN的IPv6数据包将源MAC改为自己,发送到WAN中

    这样一来,对於上级交换机而言只有这一个MAC地址在通信,从而可以通过认证


    对于客户端而言,默认网关就是路由器
    算是“欺上瞒下”,但是挺好鼡啊~

    3. 清除防火墙规则使得中继能收包

    (这个软件默认情况下啥输出都没有,就不截图了)

    这是迷の卡顿的截图供参考……

    方案三、茬WAN和LAN之间架一个只允许IPv6数据包通过的桥

    这是个二层的解决方案,所以对系统没啥设置要做(好像比上面那个又变简单了呢)而且也不会迷の卡顿

    原理更加简单就相当于内网设备直接使用上级交换机提供的IPv6服务,路由器不做任何管理

    注意:如果你的WAN口是eth0,请不要使用此方案!1. 预先禁止非IPv6数据包从WAN口流入LAN的网桥里(注意更改WAN设备名)

    2. 把WAN口加入网桥(注意更改WAN设备名、LAN设备名) 开机启动的话也是放在wan-start就好了。

    (这个也是啥输出都没有不截图)

    这是最后的万金油方案了,但是很不好看梅林固件 dnsmasq配置也不支持(再吐槽一次脑子进水的博通)。这里就不再详述如果其他办法全部失效,那就换个内核版本足够高的OpenWrt路由器吧……使用方法跟IPv4 MASQUERADE是一致的
    希望给校园网的同学带来一些帮助~
}

我要回帖

更多关于 梅林固件 dnsmasq配置 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信