|
|

楼主 |
发表于 2023-5-26 22:29
|
显示全部楼层
docker只允许内部容器互访但是容器不能访问外网
首先创建网络
docker network create -d bridge mynet --subnet=192.168.20.0/24
然后添加iptbles规则
iptables -I DOCKER-USER 1 -s 192.168.20.0/24 -d 192.168.20.0/24 -j ACCEPT
iptables -I DOCKER-USER 2 -s 192.168.20.0/24 -j DROP
这样就可以了容器互相之间可以互访,容器也能访问物理机,但是容器不能上网
如果需要放行某个IP访问外网可以这样
iptables -I DOCKER-USER 1 -s 192.168.20.0/24 -d 192.168.20.0/24 -j ACCEPT
iptables -I DOCKER-USER 2 -s 192.168.20.2 -j ACCEPT #允许这个IP访问外网
iptables -I DOCKER-USER 3 -s 192.168.20.0/24 -j DROP
如果希望容器可以被外网连接,但是容器不能主动连接外网可以这样
这个模式不要轻易使用,一般来说,只有确定容器自己本身不需要访问外网,但是外网可以访问容器的时候才可以这样
iptables -I DOCKER-USER 1 -s 192.168.20.0/24 -m state --state RELATED,ESTABLISHED -j RETURN #这里估计写ACCEPT性能更好
iptables -I DOCKER-USER 2 -s 192.168.20.0/24 -d 192.168.20.0/24 -j ACCEPT
iptables -I DOCKER-USER 3 -s 192.168.20.0/24 -j DROP
给容器设置多个网卡(目前2025-11-03网络上搜索的结果都是创建以后再附加网卡,那些方法都过时了,docker官网给出的方法如下)
https://docs.docker.com/referenc ... tainer/run/#network
--network=name=docker_bridge_192_168_21,ip=192.168.21.76 \
--network=name=docker_bridge_192_168_22,ip=192.168.22.76 \
创建类似于虚拟机那样的桥接网络 可以直接在外面ping通docker容器内的IP的,可以用于比如openwrt的LAN口,WAN口
https://docs.docker.com/engine/network/drivers/ipvlan/
docker network create -d ipvlan --subnet=192.168.23.0/24 --gateway=192.168.23.1 -o ipvlan_mode=l2 -o parent=eth4 docker_ipvlan_192_168_23
这个命令的意思是创建一个绑定到eth4接口的ipvlan网络
不确定是不是这个意思,我感觉其实如果有物理机的话,一些需求还是用虚拟机实现更方便直观
没必要什么都用docker
|
|