OpenWrt:如何通过网关@ 192.168.1.254 为 wlan 客户端@ 10.x 提供互联网访问

OpenWrt:如何通过网关@ 192.168.1.254 为 wlan 客户端@ 10.x 提供互联网访问

我想将连接到我的 Wi-Fi 的访客隔离到 10.0.0.x 子网,同时允许他们访问互联网。OpenWrt 路由器的地址是 192.168.1.48(“wifi”接口的地址是 10.0.0.1),网关的地址是 192.168.1.254。我该如何设置 OpenWrt,以便访客通过我的网关访问互联网,但仍局限于 10. 子网?

我已在 OpenWrt wiki 上阅读了 guest-wlan 配方,但我不知道该怎么做。到目前为止,我已成功为提供 10.x 地址的访客设置了 DHCP 服务器。

我还注意到我可以从 10.x 网络中的笔记本电脑解析主机名。从 dnsmasq 日志中我可以看到它知道 192.168.1.254 处有一个名称服务器(因为它在 /etc/resolv.conf 中查找过,我猜)。但是数据包如何以及为何穿过防火墙?

我在 WRT54GL 上运行 Backfire 10.03.1。网关是 Linksys E4200。这是我目前的 OpenWrt 配置:

/etc/config/dhcp

配置“dnsmasq”
        选项‘domainneeded’‘1’
        选项‘boguspriv’‘1’
        选项‘filterwin2k’‘0’
        选项‘localise_queries’‘1’
        选项‘rebind_protection’‘1’
        选项‘rebind_localhost’‘1’
        选项‘本地’‘/lan/’
        选项‘域’‘lan’
        选项‘expandhosts’‘1’
        选项‘nonegcache’‘0’
        选项‘权威’‘1’
        选项‘readethers’‘1’
        选项‘leasefile’‘/tmp/dhcp.leases’
        选项‘resolvfile’‘/tmp/resolv.conf.auto’

配置‘dhcp’‘lan’
        选项‘接口’‘lan’
        选项‘忽略’‘1’

配置‘dhcp’‘wan’
        选项‘接口’‘wan’
        选项‘忽略’‘1’

配置‘dhcp’
        选项‘开始’‘100’
        选项‘租赁时间’‘12h’
        选项‘限制’‘150’
        选项‘接口’‘wifi’

/etc/config/网络

配置‘接口’‘环回’
        选项‘ifname’‘lo’
        选项‘proto’‘static’
        选项‘ipaddr’‘127.0.0.1’
        选项‘网络掩码’‘255.0.0.0’

配置‘接口’‘lan’
        选项‘ifname’‘eth0.0’
        选项‘proto’‘static’
        选项‘网络掩码’‘255.255.255.0’
        选项‘ipaddr’‘192.168.1.48’
        选项‘网关’‘192.168.1.254’
        选项‘dns’‘192.168.1.254’

配置“接口”“wan”
        选项‘ifname’‘eth0.1’
        选项‘proto’‘dhcp’

配置‘接口’‘wifi’
        选项‘proto’‘static’
        选项‘ipaddr’‘10.0.0.1’
        选项‘网络掩码’‘255.255.255.0’

/etc/config/无线

配置'wifi 设备''wl0'
        选项‘类型’‘broadcom’
        选项‘频道’‘11’

配置'wifi-iface'
        选项‘设备’‘wl0’
        选项‘模式’‘ap’
        选项‘ssid’‘OpenWrt’
        选项‘加密’‘无’
        选项‘网络’‘wifi’

/etc/config/firewall(未更改默认值)

配置默认值
        选项 syn_flood 1
        选项输入 ACCEPT
        选项输出 ACCEPT
        选项转发 REJECT
# 取消注释此行以禁用 ipv6 规则
# 选项 disable_ipv6 1

配置区域
        选项名称 lan
        选项网络‘lan’
        选项输入 ACCEPT
        选项输出 ACCEPT
        选项转发 REJECT

配置区域
        选项名称 wan
        选项网络‘wan’
        选项输入 REJECT
        选项输出 ACCEPT
        选项转发 REJECT
        选项 masq 1
        选项 mtu_fix 1

配置转发
        选项 src lan
        选项目标广域网

# 我们需要在端口 68 上接受 udp 数据包,
# 参见 https://dev.openwrt.org/ticket/4108
配置规则
        选项名称 Allow-DHCP-Renew
        选项 src wan
        选项协议 UDP
        选项 dest_port 68
        选项 目标 接受
        选项系列 ipv4

# 允许 IPv4 ping
配置规则
        选项名称 Allow-Ping
        选项 src wan
        选项协议 ICMP
        选项 icmp_type echo-r​​equest
        选项系列 ipv4
        选项 目标 接受

# 允许 DHCPv6 回复
# 参见 https://dev.openwrt.org/ticket/10381
配置规则
        选项名称 Allow-DHCPv6
        选项 src wan
        选项协议 UDP
        选项 src_ip fe80::/10
        选项 src_port 547
        选项 dest_ip fe80::/10
        选项 dest_port 546
        选项系列 IPv6
        选项 目标 接受

# 允许必要的传入 IPv6 ICMP 流量
配置规则
        选项名称 Allow-ICMPv6-Input
        选项 src wan
        选项协议 ICMP
        列表 icmp_type echo-请求
        列表 icmp_type 目标不可达
        列表 icmp_type 数据包太大
        列表 icmp_type 超出时间
        列表 icmp_type 坏头
        列表 icmp_type 未知报头类型
        列表 icmp_type 路由器请求
        列表 icmp_type 邻居请求
        选项限制 1000/秒
        选项系列 IPv6
        选项 目标 接受

# 允许必要的转发 IPv6 ICMP 流量
配置规则
        选项名称 Allow-ICMPv6-Forward
        选项 src wan
        选项目标*
        选项协议 ICMP
        列表 icmp_type echo-请求
        列表 icmp_type 目标不可达
        列表 icmp_type 数据包太大
        列表 icmp_type 超出时间
        列表 icmp_type 坏头
        列表 icmp_type 未知报头类型
        选项限制 1000/秒
        选项系列 IPv6
        选项 目标 接受

# 包含用户自定义 iptables 规则的文件
配置包括
        选项路径 /etc/firewall.user


### 示例配置部分
# 不允许特定 IP 访问 wan
#配置规则
# 选项 src lan
# 选项 src_ip 192.168.45.2
# 选项目标 wan
# 选项 proto tcp
# 选项目标 REJECT

# 阻止 WAN 上的特定 mac
#配置规则
# 选项目标 wan
# 选项 src_mac 00:11:22:33:44:66
# 选项目标 REJECT

# 阻止区域上的传入 ICMP 流量
#配置规则
# 选项 src lan
# 选项协议 ICMP
# 选项目标 DROP

# 端口重定向将进入广域网的端口重定向到局域网
#配置重定向
# 选项 src wan
# 选项 src_dport 80
# 选项目标局域网
# 选项目标 IP 192.168.16.235
# 选项目标端口 80
# 选项 proto tcp


### 完整配置部分
#配置规则
# 选项 src lan
# 选项 src_ip 192.168.45.2
# 选项 src_mac 00:11:22:33:44:55
# 选项 src_port 80
# 选项目标 wan
# 选项目标 IP 194.25.2.129
# 选项目标端口 120
# 选项 proto tcp
# 选项目标 REJECT

#配置重定向
# 选项 src lan
# 选项 src_ip 192.168.45.2
# 选项 src_mac 00:11:22:33:44:55
# 选项 src_port 1024
# 选项 src_dport 80
# 选项目标 IP 194.25.2.129
# 选项目标端口 120
# 选项 proto tcp

我意识到这更像是一个一般的网络问题,而不是 OpenWrt 问题,但我认为我应该提到 OpenWrt。我稍微知道要实现这一点需要一些 iptables 黑魔法,但我不知道正确的咒语,所以我想寻求帮助。

提前致谢!

答案1

遇到过和你一样的情况,只是网关不同(Cisco RV042G)。但是,由于缺少功能,我的解决方案可能不适用于 E4200。如果使用其他方法可以实现,那我就不知道了。我为可能正在寻找类似解决方案的其他人添加了答案。

假设 10.0.0.0/24 是您的主网络,网关地址为 10.0.0.1,而 10.0.1.0/24 是访客网络。重现我的解决方案的步骤如下:

  • 在网关上为访客创建不同的子网。网关必须支持此功能,因为它会创建多个 NAT 表以将互联网流量路由到适当的子网。
  • 添加防火墙规则,用于阻止网关上从 10.0.1.0/24 到 10.0.0.0/24 的所有流量。
  • 使用内核为 2.6+ 的 OpenWrt 版本。brcm-2.4 版本由于缺乏 ebtables 支持而无法使用。我使用了基于默认 brcm47xx 配置的配置的 12.06 版本。使用默认映像 opkg 无法工作,而我没有尝试 10.03。我建议使用 Debian 7 i386 进行 buildroot,因为它在 amd64 和各种随机编译错误上浪费了我很多时间。我认为您可以使用 ImageBuilder,但我没有尝试过。对于 ebtables,您需要以下软件包:ebtables、ebtables-utils、kmod-ebtables-ipv4。内核模块不会自动添加为依赖项,所以要小心。
  • 如果网关不支持多个 DHCP 池,则 /etc/firewall.user 中的这些 ebtables 规则用于阻止来自网关的 DHCP 广播。RV042G 不支持。在 OpenWrt 论坛上找到它们,并将它们改编为 12.06,它使用 eth0.0 作为 lan VLAN 的接口名称。

ebtables -F

ebtables -A INPUT --接口 eth0.0 --协议 ipv4 --ip 协议 udp --ip 源端口 67:68 -j DROP

ebtables -A INPUT --接口 eth0.0 --协议 ipv4 --ip 协议 udp --ip 目标端口 67:68 -j DROP

ebtables -A FORWARD --接口 eth0.0 --协议 ipv4 --ip 协议 udp --ip 目标端口 67:68 -j DROP

ebtables -A FORWARD --接口 eth0.0 --协议 ipv4 --ip 协议 udp --ip 源端口 67:68 -j DROP

  • 可选:配置辅助子网的 lan 接口。如果网关和 OpenWrt AP 都使用默认值(192.168.1.1),则需要更改地址。

配置接口局域网

期权类型桥梁

选项 ifname“eth0.0”

选项原型静态

选项 ipaddr 10.0.1.2

选项网络掩码 255.255.255.0

选项网关 10.0.1.1

选项 DNS “8.8.8.8 8.8.4.4”

  • 告诉 DHCP 服务器要广播哪个网关,因为它通常会使用来自 LAN 接口配置的 ipaddr:

配置 dhcp 局域网

选项 lan 接口

选项开始 100

选项限制 100

选项租赁时间 1h

列表‘dhcp_option’‘3,10.0.1.1’

  • 将无线配置为常规接入点。可选:加密(推荐)、客户端隔离(也推荐)。

我发现此设置只有一个问题:如果该网络的子网是“猜测的”,并且手动为无线接口配置网络,则访客仍然可以进入主网络。考虑到访客仍然可以看到来自主网络的 arp 广播,对于理解前面陈述的人来说,这并不难。我认为可以通过在 OpenWrt AP 上设置一些防火墙规则来解决这个问题,但我必须研究一下这部分。

相关内容