我想使用我的 openvpn 连接作为同一子网中另一台主机的默认网关。我在同一个子网中有 2 台主机,它们都装有 Ubuntu Server 14.04。
主机 A运行 OpenVPN 以建立与我的 openvpn-exit-node 的连接。此主机已修改以允许 ip 转发。
主机B是客户端应用服务器,应该通过来自主机 A 的共享 openvn 连接使用互联网连接。由于我已将主机 B 的网关 IP 设置为主机 A 的 IP,因此来自主机 B 的流量现在通过主机 A 的 openvpn 连接路由。
问题出现时,主机 A 上的 openvpn 连接断开(在德国至少每 24 小时一次)并重新连接;之后主机 B 使用主机 A 的默认 gw 并绕过 openvpn 连接(有时直到隧道再次启动以及每次主机 B 重新启动时)。
目标应该是确保主机 B 仅通过 openvpn-connection 访问互联网。是否有可能确保主机 B 仅在使用 openvn-tunnel 时才能访问互联网?
主机 A(eth0 ip:10.11.12.6/gw:10.11.12.1)(tun0 ip:10.8.0.146/gw:10.8.0.145):
- 安装了 OpenVPN 并将客户端连接配置到我的 openvn-exit-node:有效
- 配置主机 A 以允许 IP 转发,并配置 IP 伪装:有效
主机 B(eth0 ip:10.11.12.9/gw:10.11.12.6): - 将默认网关更改为主机 A 的 IP 地址:有效 - 所有流量都使用主机 A 上的 openvpn-tunnel
问题: 每次 openvpn 连接断开和/或 openvpn 重新连接时,主机 B 似乎都会使用主机 A 的默认网关切换回来。此时主机 B 应该保持无法访问互联网的状态,而是使用主机 A 用于连接到 openvpn 网关的连接。
谨致问候,D0C
答案1
为实现这一点,您应该使用基于策略的路由;将允许您创建单独的独立路由表,并根据数据包属性(如源 IP)将流量引导到任何路由表。
创建新的路由表如下:
echo "200 OpenVPN" >>/etc/iproute2/rt_tables
将默认网关添加到新创建的表中,如下所示:
route add default via OpenVPN-GW-IP table OpenVPN
允许使用此路由表对 Host-B 进行路由:
ip rule add from Host-B-IP table OpenVPN
您还需要将以下路线添加到新表中:
ip route add 127.0.0.0/8 dev lo table OpenVPN
ip route add YOUR-Local-Subnet dev DEVICE-NAME table OpenVPN
更新:使用 SNAT 代替 MASQURADE,
iptables -t nat -A POSTROUTING -s 10.11.12.9 -j SNAT --to-source 10.8.0.146