互动
最近评论

Docker 不同网络的容器之间互相访问

按照Docker官方文档Docker and iptables说明,使用iptables进行网络隔离,使得默认情况下不同子网的容器之间是无法互相访问的。如果需要不同子网的容器之间互相访问时怎么办呢?文档给出了两种方法

1、禁用iptables

最直接的方法是在/etc/docker/daemon.json把iptables设置为false来直接禁用。这样所有的网络都没有隔离,但是这样做可能会破坏容器的网络。

2、使用DOCKER-USER链

可以通过iptables在DOCKER-USER链上添加规则以达到使用的目的。

iptables -I DOCKER-USER -i br-3bed419583c5 -o br-787e52a81bb4 -j ACCEPT

iptables -I DOCKER-USER -i br-787e52a81bb4 -o br-3bed419583c5 -j ACCEPT

1. 统一授权中心系统

1.1 用户管理

  • 用户注册与登录:提供接口供用户注册和登录,支持多种身份验证方式(如用户名密码、第三方登录等)。

  • 用户信息管理:提供接口管理用户信息,如修改密码、更新个人信息等。

1.2 OAuth2 服务

  • 授权服务器:实现OAuth2协议,提供授权码模式(Authorization Code Flow)、简化模式(Implicit Flow)等,根据客户端类型选择合适的授权流程。

  • 令牌颁发:颁发Access Token和Refresh Token,并支持Token的撤销和刷新。

  • 客户端管理:管理客户端(如系统A和系统B)的注册信息,包括client_id、client_secret、回调URL等。

1.3 RBAC 权限管理

  • 角色管理:定义角色,并为角色分配权限。

  • 权限管理:定义权限,并将权限与资源(如API接口)关联。

  • 用户角色分配:为用户分配角色。

2. 系统A(微信小程序)

2.1 登录与授权

  • 微信登录:使用微信小程序的登录机制获取微信用户的openid等信息。

  • OAuth2 授权:将微信登录与OAuth2结合,用户通过微信登录后,授权中心系统颁发Access Token。

  • 权限控制:在小程序端,根据Access Token中的角色和权限信息,控制用户对不同功能的访问。

2.2 API 访问

  • Token 传递:在调用后端API时,将Access Token放在请求头中进行身份验证和权限检查。

3. 系统B(独立的Web程序)

3.1 登录与授权

  • OAuth2 登录:用户通过OAuth2授权流程登录,选择授权系统B访问其信息。

  • 权限控制:在Web程序中,根据Access Token中的角色和权限信息,控制用户对不同页面或功能的访问。

3.2 API 访问

  • Token 传递:在调用后端API时,将Access Token放在请求头中进行身份验证和权限检查。

4. 权限分离与控制

4.1 角色与权限定义

  • 角色定义:定义不同的角色,如“普通用户”、“管理员”等。

  • 权限定义:定义不同的权限,如“查看用户信息”、“修改用户信息”等。

  • 角色权限分配:将权限分配给角色。

4.2 用户角色分配

  • 用户角色分配:为用户分配一个或多个角色。

  • 权限继承:用户通过其角色继承相应的权限。

4.3 权限检查

  • API权限检查:在授权中心系统中,对每个API接口进行权限检查,确保只有具有相应权限的用户才能访问。

  • 前端权限控制:在系统A和系统B中,根据用户的权限信息,控制前端页面的显示和功能的可用性。

5. 安全考虑

  • Token 安全:确保Access Token和Refresh Token的安全性,防止Token泄露和滥用。

  • Session管理:如果使用Session机制,确保Session的安全性,如设置合适的过期时间、HttpOnly标志等。

  • 跨域安全:如果系统A和系统B与授权中心系统跨域,确保CORS配置的安全性。

6. 技术选型

  • 授权中心系统:可以使用Spring Security OAuth2或Keycloak等开源框架来实现OAuth2和RBAC功能。

  • 数据库:使用关系型数据库(如MySQL)来存储用户、角色、权限等信息。

  • API网关:可以使用API网关(如Spring Cloud Gateway)来统一管理API的路由和权限检查。

7. 实施步骤

  1. 设计数据库模型:设计用户、角色、权限、客户端等表结构。

  2. 实现OAuth2服务:集成OAuth2框架,实现授权服务器和令牌颁发功能。

  3. 实现RBAC权限管理:实现角色、权限的管理功能,并将权限与API资源关联。

  4. 集成系统A和系统B:在系统A和系统B中集成OAuth2登录流程,并进行权限检查。

  5. 测试与优化:进行全面的测试,确保安全性和功能性,并根据测试结果进行优化。

wireguard的局限性

首先是必须得有公网ip

然后它的理念是设备之间组网而非域之间的组网,即两个不同网络见的两台设备进行通信。

而要实现手机(流量)访问某个局域网就得有中专服务器来配置流量转发,但如果有两个同网段的想互通就得通过添加配置(一个配置一个虚拟网卡)来实现,但是目前就只有docker的那个面板,还不支持多配置

Halo Theme Hao
更多信息请关注 Gitlab
CentOS8 使用 aliyun 阿里云 镜像站点的方法
CentOS8在线安装MySQL8
计算Map初始容量算法
Java阿拉伯数字转中文数字
日期工具类
阿里巴巴Java开发手册中的DO、DTO、BO、AO、VO、POJO定义
Java 8 的一些集合操作
Spring
JQuery.PrintArea.js的局部打印 “回调”
Android使用贝塞尔曲线画心形
Swing实现动画效果(实现Loding动画)
你好啊!
avatar
avatar
一只
不爱在博客
写注释
的小
码农
最新评论
最近发布
Groovy与Spring
Groovy与Spring
Debian 扩容分区
Debian 扩容分区
Docker 配置
Docker 配置
引用到评论