openwrt 配置 nat6

ipv6并不提倡使用nat,ipv6地址能够实现端对端通信,中间无需像ipv4那样经过nat地址转换,这对于下载工具bt ,电驴之类的而言是简便的,每个设备都拥有唯一的公网地址.
这同时也是存在隐患的,这样意味着别人可以根据ip地址访问到你的设备,如果你的设备仅仅提供内部网络的服务 例如 samba ftp 家庭nas 文件共享之类的,或者提供内部账号验证的如kerberos openldap,如果将设备暴露在公网上是不安全的,如果中间隔着一个访问限制设备–如 ipv4的网关 这样外面的地址将无法直接内网的设备,ipv6的nat在一些场合还是必要的

硬件路由似乎没有提供nat6的功能 仅支持网络运营商下发的ipv6公网前缀,路由器内部的设备只能使用其前缀的ipv6公网地址

定义 ULA地址前缀

设置 ipv6 ula地址前缀
本地唯一 IPv6单播地址 ULA,Unique Local IPv6 Unicast Address
地址段fc00::/7,包含fc00::/8和fd00::/8
fc00::/8未被定义使用 ; fd00::/8 可以使用

设置openwrt 的 ULA 前缀 ,在该openwrt下的所有主机都使用该ula前缀作为ipv6 ula地址,这就像 ipv4的子网地址 192.168.1.0/24
界面设置:
在这里插入图片描述
也可以使用 终端设置
/etc/config/network
#设置ula前缀
option ip6addr ‘fddc:6e16:9a74::/64’

ULA地址前缀 只要是 fd开头的 后面的 16进制数字可以任意设置你喜欢的–只要符合ipv6规范
ipv6地址 分为 每4个16进制为一个块 一共 8个块 而ula地址最多可以设置到前面 4个块,后面4个块留给客户机使用–作为它们的主机id
也就是说 fddc:6e16:9a74 可以设置 fd00:1111:2222:3333::/64 这样的样式

如果你不指定如何产生 ula地址 使用这个python脚本 会根据你的mac地址产生一个随机的ula前缀
https://github.com/yoshi0808/ula-generator

openwrt lan网卡ip6class设置为loal

参考
https://openwrt.org/docs/guide-user/network/ipv6/ipv6.nat6#dhcpv6
https://openwrt.org/docs/guide-user/network/ipv6/ipv6.nat6#ula_prefix

安装软件
opkg install ip6tables kmod-ipt-nat6 kmod-ip6tables kmod-ip6tables-extra luci-proto-ipv6 iputils-traceroute6 iptables-mod-ipopt

设置 lan网卡的ip6class 选项为local ,这样 openwrt 不会从上游运营商那里获取的pd前缀下发给 下游主机,只会将系统的ULA下发给下游主机这相当于ipv4分配 192.168.1.0/24的子网地址那样 根据上面例子
下游主机的ipv6前缀为 fddc:6e16:9a74:xxxx:xxxx:xxxx:xxxx
启动这个选项意味着 该openwrt子网内部的其他主机不能获取网络运营商下发的公网ipv6前缀–不再拥有公网ipv6地址

方法几种
1 编辑 /etc/config/network
config interface ‘lan’
#配置为local
list ip6class ‘local’
2 使用 uci
uci -q set network.lan.ip6class=‘local’

配置 lan网卡地址后缀

在这里插入图片描述
可以的选项
eui64 使用使用EUI64 地址 这是根据mac地址换算生成固定主机id,类似于静态地址
random 每隔一定的时间产生变化的后缀地址,多于移动客户端,如手机wifi客户机
::1 按照上述ula前缀 配置完成后的lan地址为 fddc:6e16:9a74::1
::1:2 这是静态配置主机id 如 fddc:6e16:9a74:1111:2222::3333

也可以在 /etc/config/network 配置
config interface ‘lan’
option ip6ifaceid ‘::1’

这里以 ::1 为例,假设openwrt同时提供dns服务,需要一个固定的地址
这样 LAN的ipv6 ula地址为 fddc:6e16:9a74::1

配置 odhcpd

openwrt的odhcpd 实现了 dhcp服务器和 radvd的功能
ipv6的路由通告通告icmpv6实现 而radvd就是实现该功能的,dhcp并不提供
参考 https://openwrt.org/docs/techref/odhcpd
安装odhcpd
opkg install odhcpd
###############################################
题外的,openwrt的odhcpd性能真的差,不如isc-dhcpd
单独安装 odhcpd-ipv6only ipv6部分由odhcpd提供 ipv4的由isc-dhcd提供
方法
先安装完整的 odhcpd
opkg install odhcpd
然后 安装 odhcpd-ipv6only
opkg install odhcpd-ipv6only
再卸载 完整版 odhcpd
opkg remove odhcpd
然后 在 /etc/config/dhcp
dhcp ‘lan’ 段落
#option dhcpv4 ‘disable’ 直接注释掉
###############################################

配置 dhcp
编辑 /etc/config/dhcp

config dhcp ‘lan’
option interface ‘lan’
option ra ‘server’
option dhcpv6 ‘server’
option dhcpv4 ‘server’
option ra_management ‘1’
#如果你配置dns,这是搜索域,没有则注释掉
list domain ‘test.com’
#修改ra通告间隔,linux主机不会主动发送rs请求,需要周期接收组播ra通告
option ra_mininterval ‘60’
option ra_maxinterval ‘180’
option ra_default ‘1’
#如果你配置内部dns服务器地址 设置这些地址,没有则注释掉
list dns ’ fddc:6e16:9a74::1’
list dns ‘192.168.0.1’
option ra_dns ‘1’
option start ‘100’
option limit ‘150’
option leasetime ‘12h’
禁用 ndp代理
ndp不要在 /etc/config/dhcp 出现,否则会不正常,不知原因

然后重启 网卡和odhcpd 之后就可以看到配置 lan的ula地址
/etc/init.d/network restart
/etc/init.d/odhcpd restart

配置 ipv6 nat6的默认路由

按照上述内容 客户机可以分配地址ula地址 但还无法 通过nat6 地址转换连接到外网 需要配置ip6tables MASQUERADE 和添加默认路由

首先创建脚本文件
touch /etc/pppoenat6
chmod +x /etc/pppoenat6

使用 openwrt提供的 hotplug.d 当pppoe-wan网卡 启动 并获取到 ipv6地址时 自动加载 以下脚本

编辑 /etc/pppoenat6 内容如下

#!/bin/sh
# ipv6 nat

#出口网卡 pppoe-wan
#lan网卡 br-lan
OUTIF=pppoe-wan
LANIF=br-lan

if [ "$INTERFACE" = "wan_6" ]; then
if [ "$ACTION" = "ifup" ]; then

(ip6tables -t mangle -C POSTROUTING -o $OUTIF -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu >/dev/null 2>&1) || \
ip6tables -t mangle -A POSTROUTING -o $OUTIF -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

(ip6tables -t nat -C POSTROUTING --src fc00::/6 -o $OUTIF -j MASQUERADE >/dev/null 2>&1) || \
ip6tables -t nat -A POSTROUTING --src fc00::/6 -o $OUTIF -j MASQUERADE

(ip6tables -t filter -C FORWARD -m conntrack --ctstate  ESTABLISH,RELATED -j ACCEPT >/dev/null 2>&1) || \
ip6tables -t filter -A FORWARD -m conntrack --ctstate  ESTABLISH,RELATED -j ACCEPT

(ip6tables -t filter -C FORWARD -o $OUTIF -j ACCEPT >/dev/null 2>&1) || \
ip6tables -t filter -A FORWARD -o $OUTIF -j ACCEPT

#配置默认路由
ip -6 route add default via $(ip addr show scope link $LANIF|grep inet6|awk '{print $2}'|awk -F '[/]' '{print $1}') dev $OUTIF

elif  [ "$ACTION" = "ifdown" ]; then

ip6tables -t nat -D POSTROUTING --src fc00::/6 -o $OUTIF -j MASQUERADE

ip6tables -t mangle -D POSTROUTING -o  $OUTIF -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

ip6tables -t filter -D FORWARD -o $OUTIF -j ACCEPT

ip -6 route del default via $(ip addr show scope link $LANIF|grep inet6|awk '{print $2}'|awk -F '[/]' '{print $1}') dev $OUTIF

fi
fi

添加到 /hotplug.d/iface 实现 pppoe-wan网卡启动自动加载该脚本
ln -s /etc/pppoenat6 /etc/hotplug.d/iface/50-pppoenat6
上面的 ip6tables -t filter -A FORWARD -m conntrack --ctstate ESTABLISH,RELATED -j ACCEPT 并没有删除 考虑到pppoe-wan端口 ipv6 lan可能还在通信

测试

访问 https://www.test-ipv6.com/

ping -6 www.qq.com

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在OpenWrt配置NAT转发,可以按照以下步骤进行操作: 1. 登录到OpenWrt设备的Web界面或通过SSH登录到设备的命令行界面。 2. 找到并编辑 `/etc/config/firewall` 文件,您可以使用文本编辑器如vi或nano进行编辑。 3. 在文件中找到 `config defaults` 部分,通常在文件的开头。 4. 在 `config defaults` 部分中,确保 `option input`、`option output` 和 `option forward` 的值都设置为 `ACCEPT`。这将允许转发和访问控制规则。 5. 在文件中找到或添加一个名为 `config redirect` 的新配置部分,用于定义NAT转发规则。 6. 在 `config redirect` 部分中,设置以下选项来定义转发规则: - `option name`: 规则的名称,可以随意指定。 - `option src`: 源地址,可以设置为 `wan` 表示从WAN接口接收的流量。 - `option dest`: 目标地址,可以设置为 `lan` 表示将流量转发到LAN接口。 - `option proto`: 协议,可以设置为具体的协议类型如TCP或UDP。 - `option src_dport`: 源端口,可以设置为具体的端口号或端口范围。 - `option dest_ip`: 目标IP地址,可以设置为要转发到的目标设备的IP地址。 - `option dest_port`: 目标端口,可以设置为要转发到的目标设备的端口号。 - `option target`: 目标,可以设置为 `DNAT` 表示进行目标地址转换。 7. 保存并关闭文件。 8. 重新启动防火墙服务,可以通过执行以下命令来实现:`/etc/init.d/firewall restart` 通过这些步骤,您可以配置OpenWrt设备上的NAT转发规则。确保根据您的需求正确设置源地址、目标地址、协议、端口和目标设备的IP地址和端口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值