![]() | 1 bruce0 2024-01-06 14:17:54 +08:00 我的理解, docker 默认是桥接模式, 黑色的 IP 默认和 docker 的虚拟网卡做了转发, 橙色的 IP 没有和 docker 的网络做转发 如果不正确 还请指正 我好学习一下 |
![]() | 2 Andim 2024-01-06 14:56:33 +08:00 我脑中的信息过时了么? 10.112.0.0/16 10.129.0.0/16 这是两个不同的网段呀 This is what you need when you have for example a system setup that is sitting between two different networks and needs to pass traffic between them |
![]() | 3 Honkaiteio 2024-01-06 15:39:45 +08:00 B 机器上运行,就能让 10.129.0.0/16 网段访问 10.112.0.0/16 ```bash sudo tailscale up --advertise-routes=10.112.0.0/16 ``` 见 https://tailscale.com/kb/1019/subnets |
![]() | 4 IvanLi127 2024-01-06 16:19:45 +08:00 via Android 因为 b 机子没开转发的话,就不能像路由一样在两个网口之间交换数据。 大概这样,不太专业,我最近也在折腾组网,我是这么理解的 |
![]() | 6 Jat001 2024-01-06 16:53:39 +08:00/span> systemd-networkd 的 IPForward 跟 sysctl 直接修改 net.ipv4.ip_forward 等参数有什么区别? sysctl -a | grep forward 我懒得试了,你看看开启前后有什么变化 参考资料: https://wiki.archlinux.org/title/Systemd-networkd#[Network] https://wiki.archlinux.org/title/Internet_sharing#Enable_packet_forwarding |
![]() | 7 Andim 2024-01-06 17:35:49 +08:00 @klo424 tailscale 可以从 C 以 http://10.112.91.240:8080 访问 B 么?没用过 tailscale |
9 TravisMtg OP @Jat001 > systemd-networkd 的 IPForward 跟 sysctl 直接修改 net.ipv4.ip_forward 等参数有什么区别? > sysctl -a | grep forward 我懒得试了,你看看开启前后有什么变化 这个我看 archlinux 论坛还有官方文档里面说的是 systemd-networkd 会把 sysctl 设置的东西覆盖掉,systemd-networkd 的 ipforward 默认 off ,修改为 on 之后应该是和 net.ipv4.ip_forward 的效果是一样的。 之前我试了试,前后的这个 net.ipv4.ip_forward 是一致的。 |
11 TravisMtg OP @IvanLi127 嗯嗯,我大概也能理解到这儿。 我不太能理解的是如果我的流量是从 tailscale 的网口进来的话,按道理也需要路由转发到 docker 才能访问到 docker 中的服务。但是在我开启 IPForward 之前,确实是可以通过 http://100.64.70.88:8080 访问的(也就是通过 tailscale 访问)。 (这儿的请求貌似没有吃到这个 IPForward=off 的规则 |
![]() | 12 IvanLi127 2024-01-07 02:00:48 +08:00 via Android @TravisMtg 我猜测是 docker 自己或者他配的规则已经能把所有网卡的这个端口的流量转给容器内了,所以 100.64.70.88 能访问,不能访问是出在 100.96.113.29 -> 100.64.70.88 -x -> 10.112.91.240 这个不能的地方需要机子开转发。 |
![]() | 13 Jat001 2024-01-07 12:25:47 +08:00 via iPhone tailscale 为什么能转发我知道,ip route show table all 看看就知道了,它给每个 ip 都配置了路由 不同网段,不同 interface 之间转发,要用 ip route add <cidr> via <gateway> dev <interface> 指定路由 |
![]() | 14 Jat001 2024-01-07 12:30:43 +08:00 via iPhone 然后你再看看 tailscale 的 iptables 规则,还要加 iptables -t nat -A POSTROUTING -s <cidr> -j MASQUERADE 起到 nat 的效果 |
![]() | 15 Jat001 2024-01-07 13:05:53 +08:00 再讲个好玩的,ip route add default via <gateway> dev <interface> 是添加默认路由,但你可以用 ip route add default via <gateway> dev <interface> table <table_id> 的方式只给某个 table 添加默认路由 table 有什么用呢,你可以用 ip rule 看看 ip rule add from <cidr> table <table_id> priority <更小的值> 可以让来自某个网段的流量走特定 table 同理,ip rule add to <cidr> ...,ip rule add fwmark <id> ... 等都可以 |