技术解析

ubuntu 配置路由转发,我忘了啥……
0
2021-06-24 17:50:05
idczone
事情是这样的,我这里的 vpn 有个奇怪的 bug 会导致我电脑上 dns 失效。为了避免这种情况发生,我就开了个 ubuntu 的虚拟机做专门的 vpn,然后在路由器里配置了转发表,想让访问 vpn 的流量转发到 vpn 虚拟机。
现在的情况是,vpn 配置好了,虚拟机内可以访问 vpn 网络的资源,但是从路由器上转发到虚拟机的请求却不能访问 vpn 网络的资源。
已配置好的部分:
(VPN 虚拟机)
sysctl 的 net.ipv4.ip_forward = 1
iptables FORWARD 和 INPUT 链都设为了 Accept
机器 ip 192.168.1.88
ping 172.16.x.x 的服务器是正常的。
(路由器)
172.16.0.0/16 转发 192.168.1.88
172.25.0.0/16 转发 192.168.1.88
现在客户端上 tracert 到 172.16.x.x 地址的话是显示
C:\>tracert -d 172.16.x.x

通过最多 30 个跃点跟踪到 172.16.x.x 的路由

1 <1 毫秒 <1 毫秒 <1 毫秒 192.168.1.1
2 <1 毫秒 <1 毫秒 <1 毫秒 192.168.1.88
3 * * * 请求超时。


请问我是忘了配置啥东西?(或者 iptables 配错了也有可能……)
所以你应该贴出你的这条防火墙配置


Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 192.168.0.0/16 anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination

1.88 的路由贴出来

是不是应该配个 MASQUERADE,不然包怎么回来

只是为了路由转发的话建议使用 OpenWrt,因为相关配置基本是开箱即用的。

看下是不是缺这个
```
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
```

openvpn 那我就得找厂商要单独的 vpn 软件安装包了,基本上算做梦

别忘了回程路由,图省事 masquerade 一下也行。

你 ...88 的 Network Manager 是什么?
https://wiki.archlinux.org/title/Network_configuration/>networkd 需要单独配置一下

什么意思?我没有提 OpenVPN,我说的是 OpenWrt 。

打错了,OpenWRT,vpn 软件不支持,得找厂家重新做,显然是不可能的。

都是 Linux 系统,不会不支持吧?具体是怎么个不支持呢?

二进制包,tar.gz 那种,没法在 openwrt 上用(库都不一样)

对,就是忘了这个,加上就好了。

路由器和虚拟机的 rp_filter 关掉了吗?路由器到到虚拟机是否有 NAT ?虚拟机到 vpn 的虚拟接口是否有 NAT ?
如果远程的 vpn 服务器没有到你本地 192.168.1.0/24 网段的静态路由,你需要在虚拟机上设置到 vpn 虚拟接口的 NAT·
类似 iptables -t nat -A POSTROUTING -o vpn 接口 -j MASQUERADE

依赖某些库的话确实不好办,不过还可以考虑使用 Docker 。没记错的话 Docker 有个选项是使用系统网络接口,也许是可以用的。

你意思是我本来 tar -xvf 一发加个 install 现在还得搞成 docker ?累不累啊……

我说的前提是防火墙很难配置,用一个开箱即用的系统更划算。
我之前尝试在 Ubuntu 上配 OpenVPN Server,NAT 转发、DHCP 、DNS 、UPnP 各种东西要写一大堆配置文件,最终还是直接用 OpenWrt 了。因此以后我遇到要配置 NAT 之类功能的时候都会优先选择 OpenWrt 。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服