各位,基于 tinc 已经可以把各个节点都连接起来了,但是问题是每个要访问的节点上都需要安装 tinc,比较麻烦。
因此想通过配置路由的方式打通两地的局域网,这样只需要在路由器或 Linux 节点上配置一次 tinc 客户端即可,以下是网络拓扑:
+--------------------+ + +--------------------+
| | | | |
|192.168.1.1/24 - LAN| +<------+10.200.30.1/24 - LAN|
|172.16.14.1/24 - VPN+------>+ |172.16.14.2/24 - VPN|
| | | | |
+--------------------+ + +--------------------+
A B
A、B 分别作为网关(路由器)。现在是想通过在 A、B 两个节点上配置路由和 iptables 规则,以达到 A 节点网络内主机可以访问 B 节点局域网其他主机的内容。
在 A 节点上配置路由:
ip route add 10.200.30.0/24 via 172.16.14.2
在 B 节点上配置路由和 iptables 规则:
iptables -A FORWARD -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -j ACCEPT
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o br-lan -j MASQUERADE
由于 B 节点不需要访问 A 节点内资源,因此没有在 B 上配置到 A 的路由。
但目前现在好像 A 节点和 A 节点局域网内的其他主机依然 ping 不通 B 节点网络内的主机。 不知道是哪里出了问题。。。
101
pubby 2020-02-12 11:57:09 +08:00
@lilogo
tinc.conf 中 Forwarding = kernel 应该是要加的 不加这个,收到的包直接被当成 tinc 虚拟组网来转发的,不会放回本地设备 https://github.com/gsliepen/tinc/blob/master/src/route.c#L1110 ```c void route(node_t *source, vpn_packet_t *packet) { if(forwarding_mode == FMODE_KERNEL && source != myself) { send_packet(myself, packet); return; } ``` |
102
0gys 2020-02-12 11:58:35 +08:00 via iPhone
这种 vpn 我做过。但我只需要一条 vpn 连线即可。为什么你要做两条连线? vpn 连线后有个本地地址和远程地址,最好把这两个地址固定起来。然后以指定路由的形式两边添加好路由表,双方即可互访。
|
103
lilogo OP |
104
lilogo OP @0gys 对网络这块不是很熟,当初配置 tinc 就是想打通多个 LAN 内主机的访问问题,后来才遇到要访问对端局域网内没有安装 tinc 节点的主机问题。
|
105
lilogo OP |
106
pubby 2020-02-12 12:10:50 +08:00
|
107
0gys 2020-02-12 12:14:46 +08:00 via iPhone
@lilogo 其实你不用安装 tinc 你直接在路由器上设置即可。只要两端路由器建立连线。设置好路由即可互访。你这样增加了复杂度
|
108
0gys 2020-02-12 12:17:13 +08:00 via iPhone
可以的话你加我 qq351119794 我是做这个的
|
110
weyou 2020-02-12 12:31:35 +08:00
@lilogo 那条到 192.168.1.x 的路由还是要的, 之所以你删掉还是可以通, 是因为你是从 tinc 的 ip 地址 ping 出去的. 如果你从 A 后面的机器来 ping B 后面的机器, 这条路由就起作用了. 你现在 ping 不通, 贴上 A 上面的路由表看看. A 的 firewall zone 要和 B 同样的设置.
|
111
dreamage 2020-02-12 12:31:54 +08:00
没用过 tinc,但是以网络角度来说需要做以下配置
A 端: 加路由 10.200.30.0/24 到 172.16.14.2 做 NAT tun 接口 转换 192.168.1.1/24 为 172.16.14.1 iptables tun 接口 入向放行 172.16.14.2 到 172.16.14.1 B 端: B 设备 iptables tun 接口 入向放行 172.16.14.1 到 10.200.30.0/24 B 网关 做 172.16.14.1/32 路由 到 10.200.30.1 |
112
lilogo OP @weyou #110 确实,在 A 上配置和 B 一样的 tun zone 规则并应用,然后在 B 上加上回到 A 的路由,此时从 A 网络内的其他主机再 ping B 网络内的所有机器都可以 ping 通了,感谢!
另外,这里是否因为 A 上网关所以不需要配置 NAT,如果像 B 一样不上默认网关应该就需要配置 NAT 了把? |
114
izoabr 2020-02-12 13:07:59 +08:00 1
你这个不是默认网关也不早说,折腾一大溜。
那这样的话问题就简单了。 1、A 上做路由,去往 10.200.30.0/24 的 via 172.16.14.2 dev tun0 B 上做路由,去往 192.168.1.0/24 的 via 172.16.14.1 dev tun0 2、B 上做 NAT,来自 192.168.1.0/24,去往 10.200.30.0/24 的,SNAT 为 10.200.30.1 3、防火墙策略先清掉,并设置默认 ACCEPT 再做这些,以防有干扰。 |
115
augustpluscn 2020-02-12 14:54:24 +08:00 via Android
Zerotier 不香吗。。。
|
116
lilogo OP @augustpluscn zerotier 只能解决连接性的问题,速度不太理想,即使自建 mon 的话还是受限服务端带宽
|
117
275761919 2022-02-24 15:08:09 +08:00
找到一个简单的方法没,zerotier 这个功能操作起来就很方便,但在我这个打洞成功率不高,只能用 tinc
|