找回密码
 加入我们
搜索
      
查看: 14107|回复: 41

[网络] 【已解决,附方法】求教大佬们一个走不同网关的问题。urnaid,不同网关

[复制链接]
发表于 2023-6-7 00:09 | 显示全部楼层 |阅读模式
本帖最后由 crabandapple 于 2024-8-26 08:36 编辑

貌似自己表述有点问题,现在情况是这样
主路由192.168.2.1,旁路由192.168.2.3,旁路由网关指向主路由。
unraid是192.168.2.132,网关指向旁路。里面的docker创建了macvlan网络192.168.2.0/24,网关192.168.2.3
假设现在有两个docker
① emby,选择macvlan,指定IP:192.168.2.10
② transmission,选择macvlan,指定IP:192.168.2.20
现在有什么办法让①的网关为192.168.2.3(这是默认),②的网关变成192.168.2.1

家中局域网就一个192.168.2.0/24的网段。unraid做宿主机,docker采用的br0自定义网络模式。
unraid和br0网络网关均指向旁路,然后在旁路里采用ip黑名单方式排除了tr和qb的ip。旁路是透明网关,网关指向主路由。

请问,是否可以将unraid和br0的网关均指向主路由ac68u,然后在主路由里设置静态路由表,让unraid、emby等docker的下一跳为旁路以此达到特殊访问的目的。
如果可以,是否就是下图所示这里设置就可以了?

今天在unraid内虚拟了一个ikuai尝试了一下,结果不成功,不知道是哪里设置问题,或者说是因为我的宿主机只有一个网口不能这么操作。

Snipaste_2023-06-07_00-05-28.png

=====================================================================================
20240818
什么时候的帖子了,怎么突然被人顶上来了。对于这个问题,已经有了很多办法解决。既然帖子被人顶上来了,我把几个方案说一下。
几个方案仅针对无ikuai这种软路由来说,主路由仅仅是普通路由,没什么特殊功能(比如主从路由之类的)
一、Unraid单网口情况
①unraid指向主路由。所有docker不管是host,bridge或者自定义(不修改网关)都直接走主路由。unraid和需要的docker使用http代理,unraid有专门的商店代理插件。
优点:unraid系统默认创建的自定义网络(macvlan,ipvlan)可以直接获取v6地址,不需要额外操作。前提是unraid开启了IPV4+IPV6。
缺点:商店代理插件不稳定,7.0版本已集成该插件,稳定性未知。遇到无法使用http代理的docker比较麻烦(很少,我没遇到过)。

②unraid指向主路由。删除默认自定义网络,重新创建一个指向旁路的自定义网络。走主路由的选择host或者bridge模式,走旁路的使用自定义网络。
优点:无明显优点
缺点:unraid代理插件不稳定

③unraid指向旁路由,不重新创建自定义网络。不需要走旁路使用工具的黑白名单规则规避。
优点:操作简单,不需要命令行创建网络了。
缺点:使用工具的黑白名单,个人心理不安定(仅个人而言)。从旁路获取v6更繁琐。

④unraid指向旁路由,重新创建指向主路由的自定义网络。
优点:无明显优点。
缺点:走旁路的用host或者brdge,与走自定义网络的docker有时候互通麻烦。但是unraid有【允许主机访问自定义网络】选项。自己创建的自定义网络获取v6繁琐,需要指定一个v6的ULA地址。(因家庭v6是动态,指定前缀会因下发前缀变化而失效)

二、unraid双网口情况
两个网口均取消绑定,选择桥接。创建包含部分IP地址的两个自定义网络,分别指向两个网关。
优点:各走各的,互不影响。
缺点:创建操作繁琐。
PS:
①关于论坛里有另一个帖子提及无法走两个网关的问题,个人及朋友实践,此方法可行,稳定运行四个月。张大妈有一个帖子是专门介绍这种方法的。
②网上还有一个帖子介绍双网口的,注意,那一篇是介绍如何让docker直接走第二网口,用以缓解unraid的macvlan网络失联问题的,不是走两个网关的介绍。

最后,部分家庭普通路由器不支持修改子网掩码,如果支持。可以将自己的网络扩展为/23。如此获得两个网段的支持。然后创建两个网段的自定义网络指向各自的网关即可。
此方法需要主路由支持修改子网掩码(比如电信送的中兴路由器就不支持,个人获送的是E1630型号,改为使用华硕AC68U实现)。另因为扩大了地址池,如果设备较多容易产生广播风暴。但是家庭设备少,应该可以忽略。

三、直接使用vlan网络或者路由规则实现。本人无相关设备,无经验。
=====================================================================
部分使用命令:
①查看docker现有网络:docker network ls
②删除docker现有网络:docker netwokr rm [NAME]
③创建自定义网络macvlan/ipvlan:docker network create -d macvlan/ipvlan --subnet=192.168.1.0/24 --gateway=192.168.2.1.1 -o parent=br0 abc
④分ip段:docker network create -d macvlan/ipvlan --subnet=192.168.1.0/24 --gateway=192.168.2.1.1 --ip-range=192.168.1.1/27 -o parent=br0 abc
⑤获得v6的ULA地址:docker network create -d macvlan/ipvlan ipv6 --subnet=192.168.1.0/24 --gateway=192.168.2.1.1 --subnet=fd00::/64 -o parent=br0 abc
补充说明:subnet为网段,gateway为网关,parent后面指你需要绑定的网口,最后的abc是对这个的命名。[NAME]指使用①命令查询得出的列表中NAME那一列。
至于你自己的网口名称,请自行查询。br0只做演示。
======================================================================
叠甲:
①方法很多,仅供参考。
②所有方法仅个人及为数不多的几位朋友折腾并实现。
③有时候只是折腾,并没什么特殊意义。
④如果你反对,那就是你对。



发表于 2023-6-7 07:57 来自手机 | 显示全部楼层
好复杂,不懂,只能帮顶了
发表于 2023-6-7 08:06 | 显示全部楼层
二层网络下的旁路不需要配置静态路由的
你的unraid和docker的下一跳(网关)指向出口路由器即可
出口路由器不需要配静态
你需要科学的终端把下一跳指向旁路就行
 楼主| 发表于 2023-6-7 08:41 | 显示全部楼层
rmrr 发表于 2023-6-7 08:06
二层网络下的旁路不需要配置静态路由的
你的unraid和docker的下一跳(网关)指向出口路由器即可
出口路由器不 ...

主要是就是docker的问题,因为docker配置的时候选择br0模式,自定义分配IP地址及网关,那设置好了之后所有docker都是指向同一个网关。
所以我就在想,是否可以将docker直接指向主路由,然后在主路由配置其中某个docker的IP地址下一跳为旁路。
发表于 2023-6-7 08:53 | 显示全部楼层
之前在主路由用ikuai时,好像有这个功能,直接设定条件,指定下一跳。
发表于 2023-6-7 09:03 | 显示全部楼层
本帖最后由 声色茶马 于 2023-6-7 09:08 编辑

有点儿复杂没太看懂。假设你AC86U的IP是.2.1,你的旁路由是.2.2。

按我个人理解,把unraid的interface的default gateway设置成.2.1就完了,不需要改啥静态路由表。

然后,unraid里的各种虚拟机,docker,他们的网关如果需要.2.2,我会单独设置。虚拟机很容易,docker有点儿麻烦,得macvlan曲线救国。

至于br0的网关,我很不解,敢问br0这东西你是怎么能设网关的?
 楼主| 发表于 2023-6-7 09:46 | 显示全部楼层
声色茶马 发表于 2023-6-7 09:03
有点儿复杂没太看懂。假设你AC86U的IP是.2.1,你的旁路由是.2.2。

按我个人理解,把unraid的interface的de ...

我草率了。就是macvlan。
目前的情况就是,我docker希望都使用macvlan,这样就导致所有docker都指向同一个网关。
但是我希望将tr,qb,ddnsgo这种不需要的单独摘出来干脆不走旁路,直接走主路由。用列表排除的时候总觉得会有点问题。。。
 楼主| 发表于 2023-6-7 09:55 | 显示全部楼层
ghwwx 发表于 2023-6-7 08:53
之前在主路由用ikuai时,好像有这个功能,直接设定条件,指定下一跳。

不行下单个软路由试试。。。。总想着折腾。。
发表于 2023-6-7 09:57 | 显示全部楼层
本帖最后由 声色茶马 于 2023-6-7 10:00 编辑
crabandapple 发表于 2023-6-7 09:46
我草率了。就是macvlan。
目前的情况就是,我docker希望都使用macvlan,这样就导致所有docker都指向同一 ...


哦,我好像明白点儿了。你所谓的br0,是docker的macvlan的br0,然后这个东西的网关指向了.2.1,于是你所有容器都不能用旁路由了。

我研究过一阵怎么给docker的容器指定专门的网关,因为不常折腾,现在都忘了,汗一个。仅能提供一个思路试试:

手工给docker创建一个新的虚拟interface,比如叫br1。然后指定这个br1的网关到旁路由.2.2去。需要旁路由的容器,一律挂到这个br1上去。

PS:我记得B站上有很好的讲解macvlan的视频,用关键字 docker + macvlan应该能搜出来。
发表于 2023-6-7 10:17 | 显示全部楼层
crabandapple 发表于 2023-6-7 09:55
不行下单个软路由试试。。。。总想着折腾。。

其实openwrt挺合适的。一个路由器就满足了日常以及科学上网的目的。
 楼主| 发表于 2023-6-7 10:22 | 显示全部楼层
声色茶马 发表于 2023-6-7 09:57
哦,我好像明白点儿了。你所谓的br0,是docker的macvlan的br0,然后这个东西的网关指向了.2.1,于是你所 ...

这个我会。。现在就是这么操作的。
现在是unraid自己的网关走旁路保证魔法,macvlan网关也指向旁路。但是导致tr,qb都走了旁路,在工具里设置排除列表。但是总感觉有玄学问题。
所以在想,能不能macvlan指向主路由,然后需要魔法的docker配置其IP的下一跳去旁路。因为昨天用ikuai尝试好像没成功,所以不知道这方案是不是可行,或者仅仅是我自己设置问题。
发表于 2023-6-7 10:37 | 显示全部楼层
我也是用macvlan,不过我是一个vlan一个网关
 楼主| 发表于 2023-6-7 14:33 | 显示全部楼层
0x2020201 发表于 2023-6-7 10:37
我也是用macvlan,不过我是一个vlan一个网关

请问是unriad吗?
这个vlan是在unraid上设置还是怎么弄?
一开始也想的这个,但是网上搜了个遍,摸不着头绪。。
发表于 2023-6-7 14:48 | 显示全部楼层
本帖最后由 thereone 于 2023-6-7 14:49 编辑

既然docker只需要指定容器过旁路,那在创建容器的时候指定网关不就行了 添加 --gateway=x.x.x.x。觉得麻烦那就装个portainer生成容器的时候也可以指定网关的,创建完成后点击编辑重新生成该容器时也可以编辑网关的。方法有很多。
发表于 2023-6-7 14:55 | 显示全部楼层
本帖最后由 0x2020201 于 2023-6-7 15:21 编辑
crabandapple 发表于 2023-6-7 14:33
请问是unriad吗?
这个vlan是在unraid上设置还是怎么弄?
一开始也想的这个,但是网上搜了个遍,摸不着头 ...


我是直接用docker-compose,类似如下:

  1. networks:
  2.   lan:
  3.     driver: macvlan
  4.     driver_opts:
  5.       parent: enp1s0f2.XXX
  6.     ipam:
  7.       config:
  8.         - subnet: 192.168.XXX.0/24
  9.           gateway: 192.168.XXX.1
复制代码



和楼上提到的创建容器的时候通过--gateway=x.x.x.x指定网关是一样的效果
 楼主| 发表于 2023-6-7 15:59 | 显示全部楼层
thereone 发表于 2023-6-7 14:48
既然docker只需要指定容器过旁路,那在创建容器的时候指定网关不就行了 添加 --gateway=x.x.x.x。觉得麻烦 ...

懂了,感谢答复。
就是通过命令来创建容器。。。
unriad里直接视图界面。。。不行我回头装个portainer试试。不过好像这样装unraid的dokcer界面就看不到了,得进portainer管理。
 楼主| 发表于 2023-6-7 16:00 | 显示全部楼层
0x2020201 发表于 2023-6-7 14:55
我是直接用docker-compose,类似如下:

大概知道了,就是用命令创建docker
创建一个就指定一个ip,指定一个网关。。unraid里这么操作好像有点烦。我去试试。
感谢指教
 楼主| 发表于 2023-6-7 16:12 | 显示全部楼层
thereone 发表于 2023-6-7 14:48
既然docker只需要指定容器过旁路,那在创建容器的时候指定网关不就行了 添加 --gateway=x.x.x.x。觉得麻烦 ...

刚看了下,好像不太对。
我这个是unraid宿主机。
已经建立了br0的自定义网络,网络是192.168.2.0/24网段,网关192.168.2.3。
在这里再新建docker选择这个网络无法更改网关了。。。将他删除?都重新创建?
发表于 2023-6-7 17:13 | 显示全部楼层
crabandapple 发表于 2023-6-7 16:12
刚看了下,好像不太对。
我这个是unraid宿主机。
已经建立了br0的自定义网络,网络是192.168.2.0/24网段 ...

在创建一个br1网络网段还是一样,网关不一样的。需要用到br1就改成br1就行。
发表于 2023-6-7 17:21 | 显示全部楼层
宿主机建两个网络分别指向两个网关,不同docker创建的时候走不同网络
 楼主| 发表于 2023-6-7 20:30 | 显示全部楼层
thereone 发表于 2023-6-7 17:13
在创建一个br1网络网段还是一样,网关不一样的。需要用到br1就改成br1就行。 ...

这个好像不行啊
docker network create -d macvlan --subnet=192.168.2.0/24 --gateway=192.168.2.3 -o parent=br0 br0

我用这个命令创建的br0
再创建一个,名称改别的也会提示这个网段已经存在了。。。
 楼主| 发表于 2023-6-7 20:31 | 显示全部楼层
x7touch 发表于 2023-6-7 17:21
宿主机建两个网络分别指向两个网关,不同docker创建的时候走不同网络

你的意思是创建两个网段?
比如我家里网段是192.168.2.0,然后增加一个192.168.3.0的网段?
发表于 2023-6-7 21:24 | 显示全部楼层
macvlan设置的时候我咋记得可以设置gateway?
 楼主| 发表于 2023-6-7 21:57 | 显示全部楼层
喂你好嗎 发表于 2023-6-7 21:24
macvlan设置的时候我咋记得可以设置gateway?

是可以,但是设置好了所有docker都走同一个网关。
发表于 2023-6-7 22:48 | 显示全部楼层
crabandapple 发表于 2023-6-7 21:57
是可以,但是设置好了所有docker都走同一个网关。

先算一下要走旁路由的多还是不走的多,要走的多的话 少走的少 那就手动进入到容器里面修改网关,这个不同网关还有些不好解决。只能手动修改网关了。修改方法也很简单。
创建容器的时候要加一个 --privileged 参数,才有真实的root权限。
docker exec -it 容器ID /bin/bash 就可以进入容器
进入容器后用route -n 查看路由表
linux修改网关里面
增加默认路由 route add -net 0.0.0.0/0 gw 192.168.x.x 跟上你的主路由的网关就行
删除默认路由 route del -net 0.0.0.0/0 gw 192.168.x.x 跟上你的docker设置的默认网关就行
可以先删除在添加默认路由
 楼主| 发表于 2023-6-7 23:16 | 显示全部楼层
thereone 发表于 2023-6-7 22:48
先算一下要走旁路由的多还是不走的多,要走的多的话 少走的少 那就手动进入到容器里面修改网关,这个不同 ...

非常感谢!
我去试试。。。。
发表于 2023-6-8 01:20 来自手机 | 显示全部楼层
再弄一个 docker host 不就好了
发表于 2023-6-8 02:05 | 显示全部楼层
1.方案1 不用新建子网/网段
docker network connect --gateway=<GATEWAY> <NETWORK_NAME> <CONTAINER_NAME>
当你使用 docker network connect 命令将容器连接到网络时,可以使用 --gateway 参数指定一个不同的网关。这将覆盖创建网络时指定的默认网关,仅对当前连接的容器有效。
不过重启无效。
要重启有效就写脚本,额外参数跑脚本
2. 新建子网/网段,需要用另一个网关就用那个新建的网络
发表于 2023-6-16 18:15 | 显示全部楼层
坐等楼主新的结果,
我用--gateway 的命令去限制到另一个网关,建立失败。
 楼主| 发表于 2023-6-17 14:58 | 显示全部楼层
vivin7 发表于 2023-6-16 18:15
坐等楼主新的结果,
我用--gateway 的命令去限制到另一个网关,建立失败。

暂时放弃了,用了别的办法。
将macvlan的网关指向主路由,这样tr和qb就不用走科学了。然后剩下的emby,nt那些需要的就加了个HTTP代理。
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

Archiver|手机版|小黑屋|Chiphell ( 沪ICP备12027953号-5 )沪公网备310112100042806 上海市互联网违法与不良信息举报中心

GMT+8, 2025-4-26 16:30 , Processed in 0.016329 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2007-2024 Chiphell.com All rights reserved.

快速回复 返回顶部 返回列表