各位,自建了 zerotier 并且打洞成功, 且可以访问到另外一端跑了 zerotier 的机器上资源,只是另外一端内网其它资源无法访问到, 具体网络结构如下:
1 台公网 IP 机器(在 vultr 开启了转发并关闭了防火墙)跑了自建 planet 并正常运行, 设置 ip 10.199.188.0/24(内网段 1)自动分发. 网络名称:ABC.
1 台安装在内网的 PVE 机器(192.168.2.99-内网段 2,) 通过 zerotier 加入到上述网络 ABC, 且在 planet 上状态看到在线并拿到了 10.199.188.23.
手机安装了 zerotier(设置激活了 active bridge)加入到上述网络 ABC, 且在 planet 上状态看到在线并拿到了 10.199.188.153.
目前手机可以通过 10.199.188.23 成功访问 PVE 机器本身, 但是 PVE 下一些虚拟机网段在 192.168.2.0/24 机器无法访问到.
请问如何才能访问到 PVE 上几台虚拟机上资源如 gitea/nextcloud 等(此几台虚拟机 Ip 都是固定内网段 2,如 192.168.2.100, 192.168.2.111, 网关为联通路由器 192.168.2.1)
目前尝试了很多教程, 比如 https://www.mrdoc.fun/doc/138/, 同时设置 router 为 target 10.199.188.0/24, 以及网关为 10.199.188.23. 以及另外条路由记录 target 192.168.2.0/24, gateway:192.168.2.99.
但是都失败了, 请问有哪些可以指点下大概问题会出现在哪里? 感谢.
1
jllove 2023-06-23 09:15:44 +08:00 via iPhone
看下一个是防火墙两台机器本身的防火墙,另外一个是有些端口可能被墙了,你可以测试一下,Windows 用 telnet 或者 test- connection ,mac 用 nc -vnzu
|
2
Evovil 2023-06-23 09:17:22 +08:00
|
3
azure2023us928 2023-06-23 09:21:04 +08:00 via Android
Pve 上能访问.2 段?
如果能,加上 iptables -I INPUT -s 10.199.188.0/24 -j ACCEPT |
4
azure2023us928 2023-06-23 09:22:09 +08:00 via Android
如果不能,贴出
route -na 表信息 |
5
Eaglemask OP @jllove 两边机器防火墙都关闭了
@azure2023us928 x25 (CCITT X.25) root@datacenter:~# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.2.1 0.0.0.0 UG 0 0 0 vmbr0 10.199.188.0 0.0.0.0 255.255.255.0 U 0 0 0 ztqrocq6fm 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 vmbr0 root@datacenter:~# |
6
Eaglemask OP @azure2023us928 PVE 机器可以访问.2 段的, 因为它本身就是 192.168.2.99
root@datacenter:~# ping 10.199.188.153 PING 10.199.188.153 (10.199.188.153) 56(84) bytes of data. 64 bytes from 10.199.188.153: icmp_seq=1 ttl=128 time=2.32 ms 64 bytes from 10.199.188.153: icmp_seq=2 ttl=128 time=18.4 ms 64 bytes from 10.199.188.153: icmp_seq=3 ttl=128 time=3.05 ms 64 bytes from 10.199.188.153: icmp_seq=4 ttl=128 time=2.68 ms ^C --- 10.199.188.153 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3003ms rtt min/avg/max/mdev = 2.318/6.601/18.367/6.797 ms root@datacenter:~# ping 192.168.2.118 PING 192.168.2.118 (192.168.2.118) 56(84) bytes of data. 64 bytes from 192.168.2.118: icmp_seq=1 ttl=64 time=0.042 ms 64 bytes from 192.168.2.118: icmp_seq=2 ttl=64 time=0.048 ms 64 bytes from 192.168.2.118: icmp_seq=3 ttl=64 time=0.034 ms ^C --- 192.168.2.118 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2048ms rtt min/avg/max/mdev = 0.034/0.041/0.048/0.005 ms |
8
azure2023us928 2023-06-23 09:53:17 +08:00
添加 iptables input 没效果?
检查: 1. pve 是否开启 内核转发。 net.ipv4.ip_forward = 1 2. 添加 forward 策略 iptables -I FORWARD -i ztqrocq6fm -j ACCEPT iptables -I FORWARD -o ztqrocq6fm -j ACCEPT |
9
azure2023us928 2023-06-23 09:55:00 +08:00
建议用 wireguard ,文档比较成熟。
家庭宽带没有公网 ip ? 如果有,直接部署 wireguard server ,手机端装 client ,就可以通过家里的宽带出墙。 |
10
Eaglemask OP @azure2023us928 #8
都试过啦, 都已经加上了. 9# 我不是要出墙, 宽带没有公网 ip 了, 不过可以打 10010 改为桥接. 至于 wireguard 的话懒得折腾了. zerotier 折腾了一周终于搞定. |
11
Eaglemask OP @azure2023us928 8#
root@datacenter:~# iptable -list -bash: iptable: command not found root@datacenter:~# iptables --list Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- 10.199.188.0/24 anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere DOCKER-USER all -- anywhere anywhere DOCKER-ISOLATION-STAGE-1 all -- anywhere anywhere ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED DOCKER all -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain DOCKER (1 references) target prot opt source destination ACCEPT tcp -- anywhere 172.17.0.3 tcp dpt:9000 Chain DOCKER-ISOLATION-STAGE-1 (1 references) target prot opt source destination DOCKER-ISOLATION-STAGE-2 all -- anywhere anywhere RETURN all -- anywhere anywhere Chain DOCKER-ISOLATION-STAGE-2 (1 references) target prot opt source destination DROP all -- anywhere anywhere RETURN all -- anywhere anywhere Chain DOCKER-USER (1 references) target prot opt source destination RETURN all -- anywhere anywhere root@datacenter:~# |
12
azure2023us928 2023-06-23 10:14:05 +08:00 1
问题出现在 server 端。
参照 wiregurad 让 2 个 client 之间相互通信。 (建议先说下你想做什么,然后遇到什么问题。而不是直接抛问题,以免别人还要反推你要做什么) 你的架构是 一个 server ( vultr ),2 个 client ( pve+手机),目的是想让两个 client 之间无缝隙通信。 www.v2ex.com/t/910055 看实现部分,iptables -I FORWARD -i wg0 -o wg0 -j ACCEPT ( server 端) |
13
azure2023us928 2023-06-23 10:17:19 +08:00
server 端试试加一条 route
让 192.168.2.0/24 的流量走 wg0 ip route add 192.168.2.0/24 dev wg0 |
14
Eaglemask OP @azure2023us928 我倒是打算测试下自建 tailscale, 不知道这个是否有 ios 端?
|
15
azure2023us928 2023-06-23 10:23:05 +08:00
@Eaglemas 没用过,我只用最简单,最原始的 wireguard 。它们大概都是参照 wireguard ,加了一些特性,这些特性是非必须的。
|
16
oneisall8955 2023-06-23 10:37:37 +08:00 via Android
1. 在 ztncui 后台的网络 ABC 添加路由
192.168.2.0/24 via 10.199.188.23 ,这时候每个 zt client 都会得到一条路由表,Linux 通过 route -n 查看,window 通过 route print 查看 2. 在 pve ( 192.168.2.99 即 10.199.188.23 )开启转发及 iptables 包转换 2.1 `cat /proc/sys/net/ipv4/ip_forward`看下是否转发,0 的时候,直接 `echo 1 > /proc/sys/net/ipv4/ip_forward` 2.2 ifconfig 查看 zt 的网卡名称,也就是 zt 开头,IP 为 10.199.188.23 的网卡,如:ztxxxxxxxx 2.3 iptables 添加允许及包转换,需要将 ztxxxxxxx 替换成你实际的 ifconfig 的网卡名称 iptables -I FORWARD -i ztxxxxxxxx -j ACCEPT iptables -| FORWARD -o ztxxxxxxxx -j ACCEPT iptables -t nat -I POSTROUTING -o ztxxxxxxxx -j MASQUERADE 网上很多教程类似的,例如 https://www.key-iot.com/news/77793.html ,上面总结希望对你有帮助 |
17
Eaglemask OP @oneisall8955
1. 在 ztncui 后台的网络 ABC 添加路由 192.168.2.0/24 via 10.199.188.23 ,这时候每个 zt client 都会得到一条路由表,Linux 通过 route -n 查看,window 通过 route print 查看 已增加并可以看到 2. 在 pve ( 192.168.2.99 即 10.199.188.23 )开启转发及 iptables 包转换 已经启用 2.1 `cat /proc/sys/net/ipv4/ip_forward`看下是否转发,0 的时候,直接 `echo 1 > /proc/sys/net/ipv4/ip_forward` 已启用 2.2 ifconfig 查看 zt 的网卡名称,也就是 zt 开头,IP 为 10.199.188.23 的网卡,如:ztxxxxxxxx 没问题. 2.3 iptables 添加允许及包转换,需要将 ztxxxxxxx 替换成你实际的 ifconfig 的网卡名称 iptables -I FORWARD -i ztxxxxxxxx -j ACCEPT iptables -| FORWARD -o ztxxxxxxxx -j ACCEPT iptables -t nat -I POSTROUTING -o ztxxxxxxxx -j MASQUERADE 都已经按照教程增加. |
18
wtsamuel 2023-06-23 11:27:04 +08:00
我遇到的问题和你的差不多,安装 zerotier 的机器可以访问,同一局域网下机器不能访问
我这个好像是主路由防火墙的问题,必须 ip 伪装。我提供 dhcp 的主路由是 openwrt ,在防火墙下有个 zone 的地方,lan -> wan 的 Masquerading 不开启,wan -> accept 的 Masquerading 开启 |
19
Eaglemask OP @wtsamuel 我的路由器是运营商的, 防火墙改为最低了, 进不去 ssh, 否则可以进去关闭防火墙或者安装那个 fake ip.
实在不行, 我打算在 PVE 中装一个 istoreos/openwrt 之类的来进行拨号并启用 dhcp, 这样也可以启用 fake ip |
20
mikaelson 2023-06-23 11:34:34 +08:00
我用 tinc ,最近组网成功后,连接也一直丢包,好奇怪。。。从没碰到过。。。
|
21
wtsamuel 2023-06-23 11:35:18 +08:00
我就是在 pve 里面装了 openwrt ,运营商的路由器不好设置
|
23
oneisall8955 2023-06-23 11:38:54 +08:00 via Android
可能 pve 比较特殊,需要特殊配置
https://www.reddit.com/r/Proxmox/comments/jctd6x/zerotier_on_proxmox/ Google 关键字:zerotier pve subnet 或 zerotier pve vmbr0 |
24
wtsamuel 2023-06-23 11:48:49 +08:00
直接用官方的 x86 版本的 openwrt ,很稳。就装了一个 zerotier 。openwrt 版的 zerotier 很多配置都可以省略,穿透同一网段很方便
透明代理,我是又开了一个 lxc ,防止配错的时候 openwrt 要回退,麻烦。 |
26
dongzhuo777 2023-06-25 11:39:54 +08:00
你自己个人用。没必要自建根节点。。你就自建 moon 就行了。如果你自己家有动态的公网 ip ,连 moon 都不用做。基本上 100%打洞成功的。
|
27
Eaglemask OP @dongzhuo777 有朋友要用, 只能自建根节点.
|
28
dongzhuo777 2023-06-25 11:46:44 +08:00
你都有 PVE 了 还用运营商的路由器拨号干嘛。自己 PVE 里面弄一个 Openwrt 出来走桥接拨号。有些版本的 openwrt 里面带 zerotier 插件。。这样起码可以拿到 ipv6 的公网 ip (移动),如果是电信就找运营商开公网 IP 。
没必要自建根,那玩意是给商用你超过 50 个设备限制用的。如果有 vps 就做一个 moon ,就够了,感觉墙外的 vlutr 做 moon 好像也没多大用 。 客户端有 ipv6 的 基本上用不到这个 moon 100%能打通成功。 |
29
dongzhuo777 2023-06-25 11:51:31 +08:00
你现在 PVE 下的虚拟机访问不了是因为,网关处你没有设置路由表吧。如果傻瓜式的话,PVE 建 openwrt 走桥接,有些版本有 zerotier 插件,插件里面有一个内网机器转发的勾选,勾上会自动配置路由表。这样你内网虚拟机网关是这个 openwrt 就可以拿到访问了。如果不想这么晚,可以找一个 linux 教材,看一下关于防火墙 NAT 和 DNAT 那块。设置下 iptables
|
30
Eaglemask OP @dongzhuo777 目前是 istoreos 中跑的 zerotier 插件, 一样无法成功访问内网端其它非 istoreos 资源. zerotier 设置了内网机器转发了, 一样不行.
至于 iptable,已经设置过了不行. |
31
dongzhuo777 2023-06-25 12:29:40 +08:00
@Eaglemask 用链路追踪看下到哪一跳断掉了。然后基本上就是那块设置的问题。。假如 A 已经接入了 zerotier 的网络,A 设备访问 zerotier 网络里面 ip ,那其他虚拟机只要配置好路由表还有设置好 NAT 和 DNAT 转发 按理说都 OK 的 和 zerotier 、建不建根节点没关系。
我自己的网络。家里 openwrt 介入 zerotier ,公司有台 centos 介入 zerotier 。其他家里的节点依赖 openwrt ,公司其他环境的设备 依赖 centos 。就可以打通所有设备了。 |
32
dongzhuo777 2023-06-25 18:08:18 +08:00 via Android
@Eaglemask 你是你手机端的 zerotier 访问不了 pve 里面其他节点的内网地址吧。那你 pve 里面作为 zerotier 的节点要配置内网转发。然后根节点要配置一个 你 pve 内网 指向 pve 里面的 zerotier 节点。
举例,你 pve 内网设备的网段是 192.168.2.0/24 。istores 分配到的 zerotier ip 是 10.0.0.1 |
33
dongzhuo777 2023-06-25 18:10:36 +08:00 via Android
@Eaglemask 你是你手机端的 zerotier 访问不了 pve 里面其他节点的内网地址吧。那你 pve 里面作为 zerotier 的节点要配置内网转发。然后根节点要配置一个 你 pve 内网 指向 pve 里面的 zerotier 节点。
举例,你 pve 内网设备的网段是 192.168.2.0/24 。istores 分配到的 zerotier ip 是 10.0.0.1 。要把 192.168.2.0/24 指向 10.0.0.1 才行。自建根的我不知道。但是走官方的只需要在官方的控制面板设置下就行了。但原理应该是一样的 。如果手机上装个命令行设备看下链路追踪是最直观的 |
34
oneisall8955 2023-06-25 19:04:38 +08:00 via Android
@dongzhuo777 看前文,我回复给 OP 的必要配置,OP 都配置了,很奇怪,期待 OP 折腾成功
|