我正在尝试通过运行 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
这样交通就可以恢复。