Wireguard 路由问题

2022 年 8 月 30 日
 Richardyyz

大家好,目前我有三台电脑 A,B,C 分布在不同地方, A 和 B 电脑各自通过 wireguard 连接到 C,并且 A 和 B 能成功通讯。

A =====> C <===== B

我的目标是让 A 的流量全部由 B 转发出去。

请问如何用 iptables 或者 nginx 等工具实现?

6742 次点击
所在节点    Linux
27 条回复
Damn
2022 年 8 月 30 日
跟我差不多,但我 ABC 互联,你要不要考虑一下?
你可能是只有 C 有公网 ip ?
如果 B 是锥形 nat 可以借助 C 打洞的。
Damn
2022 年 8 月 30 日
如果一定要 A 通过 C 连接到 B 作为出口的话,在 C 的路由表上添加一条记录就行了。
yorkyoung
2022 年 8 月 30 日
如果没猜错你的意图的话 直接在 B 搭个 gost 服务端就能实现
leonunix
2022 年 8 月 30 日
C 上要开 2 个 wireguard 进程,就是要 2 个端口 A ,B 。
A 连接 A allow 0.0.0.0/0
B 连接 B allow 0.0.0.0/0
然后 A 上加 0.0.0.0/0 路由表到 B 就可以了
Richardyyz
2022 年 8 月 30 日
@Damn 三台电脑都有公网 IP ,并且 ABC 目前都可以相互通信。能具体说说在 C 的路由表上加什么记录吗?感谢啦
Richardyyz
2022 年 8 月 30 日
@leonunix 需要两个 namespaces 吗?
Damn
2022 年 8 月 30 日
@leonunix 你是 wg-go 么,不然 wg 工作在内核里的,只需要写配置文件,怎么会有进程呢。。。
@Richardyyz 假设
A 10.0.0.1/24 连接到 C allow 0.0.0.0/0
B 10.0.0.2/24 连接到 C allow 10.0.0.0/24
C 10.0.0.3/24 接受 AB allow 10.0.0.0/24
C 添加路由表 10.0.0.1 mask 0.0.0.0 route 10.0.0.2 (意会即可,根据系统不同修改)
Damn
2022 年 8 月 30 日
C 可能要改成 10.0.0.3/32
allow 10.0.0.1/32 和 10.0.0.2/32
joshu
2022 年 8 月 30 日
ip route add default via <link-ip-of-B-on-interface-between-C-and-B> dev <interface-between-C-and-B> table <table_id or table_name>
ip rule add iif <interface-between-A and C> lookup <table_id or table_name> pref 50
如果用 table_id ,那就用数字,如果用 table_name ,在 /etc/iproute2/rt_tables 加上一行数字和名称的对应关系
如果是三层设备连接,可以不加 via XXX ,直接 dev XXX 就行

也可以用 vrf 来实现,从而避免写 ip rule 规则
no996
2022 年 8 月 30 日
我印象中 wireguard 只解决内网或者穿透问题,但是流量转发需要单独搭建多一个服务才行
leonunix
2022 年 8 月 31 日
@Damn
没说清楚。是开 2 个 interface wg0 wg1
单个 interface 无法多个客户端同时 allow 0.0.0.0/0
manfred4527
2022 年 8 月 31 日
首先 A 和 B 连接公网 C 后,A 和 B 是可以直接通信的,C 不开 NAT 出口。
然后 A 和 B 直接再套娃点对点建立 VPN 行不?如 GRE-tunnel 之类的。
Richardyyz
2022 年 9 月 1 日
@leonunix A 点不能写路由表,只能在 C 点或者 B 点进行操作。请问有其他方法吗?
Richardyyz
2022 年 9 月 1 日
@joshu 请问这两行命令是写在 C 点上吗?
Richardyyz
2022 年 9 月 1 日
@Damn 刚才试了一下,最后在 C 点上尝试添加路由表,发现不能 mask 0.0.0.0 ,返回的是 Invalid Argument.

我在 ubuntu 上尝试的命令:sudo route add -net 10.0.0.1 netmask 0.0.0.0 gw 10.0.40.2
szdosar
2022 年 9 月 2 日
跑个题,ABC 都有公网了,你何不直接在 B 安装个 v2r 代理服务端,然后 B 安装个 v2r 客户端实现?
szdosar
2022 年 9 月 2 日
跑个题,ABC 都有公网了,你何不直接在 B 安装个 v2r 代理服务端,然后 A 安装个 v2r 客户端实现?
joshu
2022 年 9 月 2 日
darrh00
2022 年 9 月 3 日
装个 tailscale 一切搞定,用节省出来的时间想想如何赚钱不好吗?
Richardyyz
2022 年 9 月 3 日
@darrh00 这里只想纯粹交流一下技术。而且我也不需要去想如何赚钱。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/876434

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX