在 Linux 上通过特定 IP 地址/虚拟接口通过 OpenVPN 创建路由

在 Linux 上通过特定 IP 地址/虚拟接口通过 OpenVPN 创建路由

我家里有一台 Linux 服务器,我在其上运行一个连接到网络上某个服务器的 OpenVPN 客户端。我想要存档的是:我希望我的家庭服务器公开一个接口(例如 IP 地址),我可以将其作为本地网络中另一台机器的默认网关,然后该机器将通过 OpenVPN 路由流量。

例如,如果我的家庭服务器具有内部 IP 192.168.1.1、OpenVPN IP 10.0.1.1,我的外部服务器具有 OpenVPN IP 10.0.1.2 和公共 IP 1.2.3.4,而我网络上的另一台计算机具有内部 IP 192.168.1.2,则我需要到公共 IP 9.8.7.6 的跟踪路由,如下所示:

(192.168.1.2) => (192.168.1.1 > 10.0.1.1) => (10.0.1.2, 1.2.3.4) => ... => (9.8.7.6)

其中每个(.*)代表一台计算机。我在网上搜索过,还没有找到类似的设置。这样做的目的是建立一个稳定的(始终在线的)VPN 隧道,而不必在所有机器上安装它。我猜这必须使用 iptables 来实现,但目前不知道需要做什么。

答案1

192.168.1.1 上的 OpenVPN 设置

dev tun0

script-security 3

remote 1.2.3.4
port 1234

ifconfig 10.0.1.1 10.0.1.2

secret static.key

user nobody
group nobody

comp-lzo

ping 15
ping-restart 45
ping-timer-rem
persist-tun
persist-key

log /var/log/openvpn.log

verb 3

1.2.3.4 上的 OpenVPN 设置

dev tun0

script-security 3

local 1.2.3.4
port 1234

ifconfig 10.0.1.2 10.0.1.1

secret static.key

user nobody
group nobody

comp-lzo

ping 15
ping-restart 45
ping-timer-rem
persist-tun
persist-key

log /var/log/openvpn.log

verb 3

openvpn隧道成功运行后,您需要在192.168.1.1上添加以下规则

# iptables -t nat -I POSTROUTING -s 192.168.1.2 ! -d 192.168.0.0/16 -j SNAT --to-source 10.0.1.1

在 192.168.1.1 上你需要添加以下规则

# iptables -t nat -I POSTROUTING -s 10.0.1.1 -j SNAT --to-source 1.2.3.4

注意:不要忘记在双方都启用 IP 转发

# echo 1 > /proc/sys/net/ipv4/ip_forward

相关内容