在 Ubuntu 中通过 tun 接口从 LAN 路由流量

在 Ubuntu 中通过 tun 接口从 LAN 路由流量

我正在尝试通过运行 openconnect 的 Ubuntu Server 实例将一些流量从我的本地 LAN 通过 ip 路由到远程服务器。

     Client             Router      Ubuntu Server (ens160)  tun0   remote resource
| 192.168.1.x | -> | 192.168.1.1 | -> | 192.168.1.38 | -> | VPN | -> | 1.1.1.1 |

我的路线如下:

Destination    Gateway     Genmask         Flags Metric Ref    Use  Iface
0.0.0.0        0.0.0.0     0.0.0.0         U     0      0      0    tun0
1.3.4.0        0.0.0.0     255.255.255.0   U     0      0      0    tun0   (vpn dhcp range)
1.4.5.6        192.168.1.1 255.255.255.255 UGH   0      0      0    ens160 (ip from remote)
192.168.1.0    0.0.0.0     255.255.255.0   U     0      0      0    ens160
192.168.122.0  0.0.0.0     255.255.255.0   U     0      0      0    virbr0

我已成功将前往 1.1.1.1 的流量路由到我的 Ubuntu 服务器192.168.1.38。来自客户端的跟踪路由可验证这一点。

Tracing route to [1.1.1.1] over a maximum of 30 hops:
  1    <1 ms    <1 ms    <1 ms  192.168.1.1
  2    <1 ms    <1 ms    <1 ms  192.168.1.38
  3     *        *        *     Request timed out.

因此,流量在ens160接口上的 Ubuntu Server 处停止(我推测)。这就是我迷路的地方。我已经搜索过解决方案,但我对这里的众多选项感到有点困惑。最初我只想添加一条静态路由src lan through tun0,但网关是0.0.0.0?然后我看到第三条路由是属于远程 vpn 位置的 ip。所以我推测这是一条通过我的 WAN 为 VPN 发出的路由。

我已经启用了 IP 转发。并尝试使用 iptables 添加伪装和 nat 规则。但我确信我以某种方式搞砸了。

iptables -t nat -A POSTROUTING --out-interface tun0 -j MASQUERADE  
iptables -A FORWARD --in-interface ens160 -j ACCEPT

我感谢任何帮助。

答案1

听起来你需要在内核中启用转发。运行:

# sysctl -w net.ipv4.ip_forward=1
or
# echo 1 > /proc/sys/net/ipv4/ip_forward

看看它是否有效。

添加 net.ipv4.ip_forward=1/etc/sysctl.d/80-forward.conf或类似内容)以便在重启后继续存在。

编辑

也许您忘记允许流量在 FORWARD 链中返回。尝试以下操作:

# iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

这样交通就可以恢复。

相关内容