n1-docker-openwrt实现ipv4/ipv6双栈网络

主要参考恩山论坛两篇帖子

【新提醒】回馈论坛!整理发布docker openwrt ipv6/ipv4,自由DIY任意镜像-多次测试成功 - OPENWRT专版 - 恩山无线论坛 - Powered by Discuz! (right.com.cn)

【新提醒】【终极教程】N1做旁路由,IPv6设置教程,超详细 - 斐讯无线路由器以及其它斐迅网络设备 - 恩山无线论坛 - Powered by Discuz! (right.com.cn)

宿主机

创建macnet

1
docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 --subnet=fe80::/16 --gateway=fe80::1 -o parent=eth0 macnet

修改网络接口配置

修改/etc/network/interfaces(debian ubuntu)

修改/etc/sysconfig/network-scripts/ifcfg-eth0(centos)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# interface file auto-generated by buildroot
#iface eth0 inet dhcp
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto macvlan
iface macvlan inet static
address 192.168.2.2
netmask 255.255.255.0
gateway 192.168.2.120
dns-nameservers 192.168.2.1
pre-up ip link add macvlan link eth0 type macvlan mode bridge
post-down ip link del macvlan link eth0 type macvlan mode bridge

主要是macvlan的配置

照理讲这里的ip应该是和macnet的一样的,但是我就这样也获取到了ipv6…不想再深究了,就这样吧

image-20220123172012563

编辑/etc/rc.local,添加:

1
2
3
4
5
6
modprobe
modprobe pppoe
modprobe udp_tunnel
modprobe ip6_udp_tunnel
modprobe ip6table_nat
modprobe tun

重启宿主机rebootsystemctl restart network

openwrt

1
2
3
4
5
docker pull buddyfly/openwrt-aarch64:latest
docker run --restart always --name openwrt -v /xa:/xa -d --network macnet --privileged buddyfly/openwrt-aarch64:latest /sbin/init
docker exec -it openwrt /bin/sh
vi /etc/config/network
# 修改ip 网关 dns
1
2
3
option ipaddr '192.168.1.111'
option gateway '192.168.1.1'
option dns '192.168.1.1'

修改/etc/sysctl.conf(获取ipv6的关键)

1
2
3
4
5
# Defaults are configured in /etc/sysctl.d/* and can be customized in this file
net.ipv6.conf.all.disable_ipv6=0
net.ipv6.conf.default.disable_ipv6=0
net.ipv6.conf.default.accept_ra=2
net.ipv6.conf.all.accept_ra=2

修改/etc/rc.local

1
2
3
4
ip link set eth0 promisc on
ip link add link eth0 wan_mac0 type macvlan
ip link set wan_mac0 address 02:42:00:11:7C:01
ip link set wan_mac0 up

重启openwrt

修改IPtable(如果出现不能上网,去openwrt防火墙添加规则)

iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE

也可以尝试(有桥接存在的情况下)
iptables -t nat -I POSTROUTING -o br-lan -j MASQUERADE

==你会发现还是没有ipv6,我的是这样…==

第二篇帖子

  • lan口下面DHCP服务器->基本设置-忽略此接口

  • lan口下面DHCP服务器->ipv6设置-全部禁用

  • lan口高级设置-使用内置的ipv6管理

  • lan口物理设置-关闭桥接(否则旁路由无法联网)

  • 添加新接口(名称:lan6,协议:DHCPv6客户端,自定义接口:@lan

  • lan和lan6防火墙都选lan

  • image-20220123173602239

  • 取消勾选网络-DHCP/DNS-高级设置里的“禁止解析 IPv6 DNS 记录”

重启

反正我是真的有ipv6了

image-20220123173815992