openwrt是一个功能强大的软路由系统,很多人用它来做旁路由,即做一些流量处理的事情,接下来我们开始安装在Docker中安装OpenWrt吧。

1 Docker镜像选择

无论是在ubuntu、centos还是群晖中安装,都需要先选择一个合适的镜像。目前发现了一个功能完整的Docker镜像,建议使用这个镜像:sulinggg/openwrt

docker pull sulinggg/openwrt:x86_64

2 macvlan配置

需要给OpenWrt分配IP地址,因此需要配置虚拟网卡,在Docker中采用的是macvlan。

需要注意,群晖需要开启openSwitch,这样以后新增虚拟机就不会冲突了,开启openSwitch后,可以看到群晖新建了一个ovs_eth0虚拟网卡,我们在创建macvlan时,对应的实际接口应该是ovs_eth0。

# 开启混杂模式
ip link set  ovs_eth0 promisc on

# 创建一个子网为192.168.10.1/24的虚拟网络,网关是192.168.10.1,名为ovs_lan
docker network create -d macvlan --subnet=192.168.10.1/24 --gateway=192.168.10.1  -o parent=ovs_eth0 ovs_lan

3 Docker实例创建

# 创建名为openwrt1的容器,网络选择ovs_lan,ip指定为192.168.10.2

docker run -d --name openwrt1 --net ovs_lan --privileged --ip 192.168.10.2 sulinggg/openwrt:x86_64 /sbin/init

创建完容器后,需要登录到容器中,修改网络配置

# 登录openwrt1
docker exec -it openwrt1 bash

# 编辑网络
vim /etc/config/network

替换lan网络配置如下:

config interface 'lan'
        option type 'bridge'
        option ifname 'eth0'
        option proto 'static'
        option ipaddr '192.168.10.2'
        option netmask '255.255.255.0'
        option gateway '192.168.10.1'
        option broadcast '192.168.10.255'
        option dns '119.29.29.29'

然后重启

/etc/init.d/network restart

4 OpenWrt配置

接下来需要登录指定的IP:192.168.10.2,默认密码是password。下面的两项调整,调整完后记得保存并应用

LAN接口调整

在openwrt的网络配置中,点击接口选项,修改名为LAN的接口。

物理配置中,取消勾选桥接接口;在最下方的基本配置中,关闭DHCP;最下方的IPV6设置中,路由通告服务DHCPv6 服务NDP 代理全部选择已禁用

防火墙调整

在openwrt的网络配置中,点击防火墙选项。取消勾选启用 SYN-flood 防御入站数据出站数据转发全部选择接受;

5 客户端配置

在完成上述配置后,就可以将你的客户端网关指向新搭建的openwrt了。此时,应该可以正常访问外部网站,也能访问内网任意地址。

6 附录

标签: Linux, docker, openwrt

已有 8 条评论

  1. 很奇怪,我之前也是这样做,现在也按照博主你的这个步骤再做了一遍,其它一切正常,在设置passwall时,节点都是正常能ping,就是无法连接谷歌,百度却是能正常连接,但使用它做网关时,所有的网站都是无法打开的。我也有开了虚拟机。ovs_eth0虚拟网卡和eth0这两个我都开启混杂模式,都无效,很是奇怪。

    1. JASON JASON

      我和前面的兄弟一样的问题, 可以打开百度国内的网站,就是无法连接google,网卡什么检查过了。混杂模式也正常开启。 不知道有没有碰到类似的现象怎么解决的?

      1. 我百度过很多答案,有一个答案可能比较靠谱,就是群晖的问题,有些版本可以,有些版本不行。所以我直接放弃了。

        1. max max

          似乎是因为群晖的iptables缺模块,可以参考这个https://github.com/sjtuross/syno-iptables

          1. abc abc

            确实,这个是最终解决方案

  2. wssmrw wssmrw

    按照教程,整个装完了,也能正常访问openwrt。目前的问题是,iphone设置openwrt地址作为网关之后,无法正常上网

    1. wssmrw wssmrw

      之前有个桥接忘记关掉了,现在iphone能够用openwrt作为旁路由使用了

    2. wssmrw wssmrw

      之前有个桥接忘记关掉了,现在iphone能够用openwrt作为旁路由使用了

添加新评论