网络简图见下图:
A B(Raspberry Pi) C(VPS)
192.168.0.* <---> 192.168.0.112 111.111.111.111 <---> Internet
10.0.2.60 <---> 10.0.2.251
tinc tinc
A(PC):
B(Raspberry Pi):
C(VPS):
A(PC)与 B(Raspberry Pi)同属 192.168.0.0/24,B(Raspberry Pi)与 C(VPS)通过 tinc 连接,现在想要实现的效果是:A(PC)将网关设置 192.168.0.112 ,所有流量经过 B(Raspberry Pi),然后流量通过 tinc 到达 C(VPS)出口。这样考虑的原因主要是因为 tinc 比较稳定,使用的人也比较少。网络上有使用 OpenVPN 这样干的,但是 OpenVPN 与 tinc 还是稍有差异。V2EX 上这样干过的讨论一下,谢谢!
1
xduanx 2019-08-29 08:27:51 +08:00 1
这个问题再简单不过了
1,树莓派上启用路由转发;树莓派上指默认路由到 VPS 的 10.0.2.251 上;如果默认路由不方便,那就写根据源 IP 的策略路由 2,VPS 上在 111.111.111.111 上写 nat 规则; VPS 写 192.168.0.0 的回城路由,指向 10.0.2.60 |
2
chunchu OP @xduanx
非常不好意思,这个问题对懂网络的人来说很简单,但是我搞了好久还是搞不定,我也知道做伸手党是不好的,所以我先找了一本书来看看,再尝试一下。 Linux Advanced Routing & Traffic Control https://lartc.org/ |
3
blackeeper 2019-08-29 09:40:01 +08:00 1
1 楼说的很正确,我来补上命令吧
在树莓派上和 C(VPS)编辑文件:/etc/sysctl.conf,添加如下一行,开启路由转发模式 net.ipv4.ip_forward = 1 执行命令:sysctl -p /etc/sysctl.conf 在 C(VPS)上执行: iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE ip route add 192.168.0.0/24 via 10.0.2.60 |
4
chunchu OP |
5
blackeeper 2019-08-29 15:13:45 +08:00 1
|
6
xduanx 2019-08-29 17:59:29 +08:00 1
不请自来
源 IP 策略路由 ip rule add from 192.168.0.0/24 table 1000 ip route add default via 10.0.2.251 table 1000 (其中 1000 这个数字随便写,写 20 也行) |
7
chunchu OP @blackeeper @xduanx
在树莓派上添加 ip route add default via 10.0.2.251 后不能联网了,查看路由表出现很奇怪的情况,tinc 本身在路由表中添加了两条 ``` pi@Pi:~ $ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.0.2.251 0.0.0.0 UG 0 0 0 tinc 0.0.0.0 192.168.0.1 0.0.0.0 UG 202 0 0 eth0 0.0.0.0 192.168.0.1 0.0.0.0 UG 303 0 0 wlan0 10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 tinc 169.254.0.0 0.0.0.0 255.255.0.0 U 204 0 0 tinc 192.168.0.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 303 0 0 wlan0 ``` |
8
xduanx 2019-08-29 22:07:27 +08:00
不能联网正常啊,因为你修改了他的默认路由,而且有可能 10.0.2.251 的 metric 比另外 2 条默认路由高
你发的路由表现在是在的路由表是正常的,在预料范围捏 |
9
xduanx 2019-08-29 22:08:28 +08:00
你就用策略路由吧,不要用默认路由了,6 层所写的那样
|
10
xduanx 2019-08-29 22:11:27 +08:00
8 层说错了,metric 越小,优先级越高
|
11
xduanx 2019-08-29 22:12:46 +08:00
删掉刚刚添加的默认路由方式 2 中
1,重启 2,ip route del default via 10.0.2.251 |
12
xduanx 2019-08-29 22:15:59 +08:00 1
给你命令,直接复制粘贴吧
1,在树莓派上和 C(VPS)编辑文件:/etc/sysctl.conf,添加如下一行,开启路由转发模式 net.ipv4.ip_forward = 1 执行命令:sysctl -p /etc/sysctl.conf ,2,启用策略路由 ip rule add from 192.168.0.0/24 table 1000 ip route add default via 10.0.2.251 table 1000 3,在 C(VPS)上执行: iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE ip route add 192.168.0.0/24 via 10.0.2.60 基本上就是复制刚刚那位老哥的命令 |
13
chunchu OP @xduanx
现在的情况是,C(VPS)上运行没有问题,树莓派上运行策略路由 ip route add default via 10.0.2.251 table 1000 树莓派就卡住了,网络就断了,需要重启树莓派才行,感觉策略路由添加不上,但是直接添加默认路由可以添加上,可以 ssh 登陆到树莓派,但是 ping 外网不通。这个问题很奇怪。 |
14
chunchu OP 我怀疑是不是树莓派系统的问题,我安装的是 Raspbian 9 stretch.
|
15
xduanx 2019-08-30 08:22:41 +08:00 via iPhone
ip rule list 看下输出
ip route show table 1000 看下输出 |
16
xduanx 2019-08-30 08:47:42 +08:00
用默认路由办法如下
ip route add 111.111.111.111/32 via 192.168.0.1 ip route add default via 10.0.2.251 |
17
xduanx 2019-08-30 08:50:04 +08:00
不是我吹牛逼,你这个小项目,我在公司连续干了一年,每天就是翻来覆去改这些东西
所以,你这个不伦什么刁钻的问题,截图就行了 |
18
xduanx 2019-08-30 08:52:49 +08:00
你这个除了 tinc 还有其他多选
gre/vxlan/l2tp over ipsec wireguard openvpn 单纯的 ipsec |
19
chunchu OP @xduanx
ip rule lis 显示已经添加成功了 pi@Pi:~ $ sudo ip rule list 0: from all lookup local 32765: from 192.168.0.0/24 lookup 1000 32766: from all lookup main 32767: from all lookup default 我不是怀疑你的能力问题,你给出的代码肯定没有问题,我怀疑是系统的问题。我重新装一下树莓派的系统试试。 |
20
xduanx 2019-08-30 09:17:21 +08:00
哈哈,都可以,随便你怎么折腾,我都能搞得定;
我也没怀疑自己的能力,只是在 V 站这个大神聚集的地方看到了可以露脸的机会, 情不自禁的想吹一波牛逼 |
22
chunchu OP |
23
Padawan 2020-03-15 21:49:02 +08:00
@xduanx
hello, 我遇到了类似但略有不同的问题, 能不能请你帮看一下应该怎么解决? LAN: 192.168.1.0/24 树莓派: eth0: 192.168.1.2 Wireguard 虚拟网卡: 192.168.3.1 LAN 网关: 192.168.1.1 网络是 LAN 网关->光猫->WAN 现在树莓派上做的透明代理设置可以正常工作. 但是作为 Wireguard 服务器, 外面连进来的客户端无法访问 LAN 也无法访问互联网. 是需要增加路由设置吗? 我如果把 ip route add local 0.0.0.0/0 dev lo table 100 去掉, Wireguard 客户端连进来后可以访问 192.168.3.1,但是无法访问 WAN. 我需要做什么改动才能保持透明代理的同时让 Wireguard 客户端接入后也能访问 LAN 和 WAN 呢? 透明代理是通过写在 /etc/rc.local 里的 ip rule add fwmark 1 table 100 ip route add local 0.0.0.0/0 dev lo table 100 ... 以下是我设上透明代理和 Wireguard 后的配置. # ip route list table main default via 192.168.1.1 dev eth0 src 192.168.1.2 metric 202 192.168.1.0/24 dev eth0 proto dhcp scope link src 192.168.1.2 metric 202 192.168.3.0/24 dev wg0 proto kernel scope link src 192.168.3.1 # ip route list table 100 local default dev lo scope host # ip rule list 0: from all lookup local 32765: from all fwmark 0x1 lookup 100 32766: from all lookup main 32767: from all lookup default |