新浪博客

OpenWrt上实现NAT1(FullconeNAT)的方法,无需DMZ/UPnP

2018-05-29 20:05阅读:
侵删
来自恩山无线论坛,原帖地址 http://www.right.com.cn/forum/thread-319827-1-1.html
对我来说有点用,但是现在还不懂编译,做个记录,以后返回来看吧
此文所提文件在原贴下载
-----------------------------------------------------------------------------------------------------------
源码及作者博客 https://github.com/Chion82/netfilter-full-cone-nat
https://blog.chionlab.moe/2018/02/09/full-cone-nat-with-linux/ 编译: 修改 include/netfilter.mk ,加入下面的代码
  1. $(eval $(call nf_add,IPT_FULLCONENAT,CONFIG_NETFILTER_XT_TARGET_FULLCONENAT, $(P_XT)xt_FULLCONENAT))
  2. IPT_BUILTIN += $(IPT_FULLCONENAT-y) $(IPT_FULLCONENAT-m)



修改 package/kernel/linux/modules/netfilter.mk,加入下面的代码
  1. define KernelPackage/ipt-fullconenat
  2. TITLE:=Netfilter full-cone NAT support
  3. KCONFIG:= \
  4. CONFIG_IP_NF_TARGET_FULLCONENAT \
  5. CONFIG_NETFILTER_XT_TARGET_FULLCONENAT \
  6. CONFIG_NF_CONNTRACK_EVENTS=y
  7. FILES:=$(foreach mod,$(IPT_FULLCONENAT-m),$(LINUX_DIR)/net/$(mod).ko)
  8. AUTOLOAD:=$(call AutoProbe,$(notdir $(IPT_FULLCONENAT-m)))
  9. $(call AddDepends/ipt,+kmod-nf-nat)
  10. endef

  11. $(eval $(call KernelPackage,ipt-fullconenat))



target/linux/generic/config-(内核版本) 加一行:
  1. CONFIG_IP_NF_TARGET_FULLCONENAT=m

把附件的 651-netfilter-add-xt_FULLCONENAT-target.patch 复制到 target/linux/generic/hack-(内核版本) 中
把附件的 800-fullconenat-target.patch 复制到 package/network/utils/iptables/patches/ 中


make menuconfig 选择 Kernel modules - Netfilter extensions - kmod-ipt-fullconenat,后编译


使用:
先禁用 OpenWrt 自带的 MASQUERADE NAT (Symmetric NAT):在 网络-防火墙 基本设置中去掉 WAN 区域的“IP 动态伪装”选项,保存 禁用 NAT 后会断网,然后在自定义规则中加两行规则启用 Full cone NAT:
  1. iptables -t nat -A zone_wan_prerouting -j FULLCONENAT
  2. iptables -t nat -A zone_wan_postrouting -j FULLCONENAT

这样内网所有设备都是 Full cone NAT。而原本的 DMZ 只能实现一台设备的 Full cone NAT,UPnP 又无法穿越多层 NAT,优点显而易见


对所有设备开放 Full cone NAT 可能不太安全,可以这样灵活运用
只对内网某一个或多个 IP 启用 Full cone NAT,其余为 Symmetric NAT:
  1. iptables -t nat -A zone_wan_prerouting -j FULLCONENAT
  2. iptables -t nat -A zone_wan_postrouting -s 192.168.1.2,192.168.1.3,192.168.1.4 -j FULLCONENAT
  3. iptables -t nat -A zone_wan_postrouting -j MASQUERADE





在 zone_wan_postrouting 加 -s 参数指定源 IP 即可,多个 IP 用半角逗号隔开

我的更多文章

下载客户端阅读体验更佳

APP专享