将 OpenVPN 共享至本地 LAN 上的指定 IP 范围

将 OpenVPN 共享至本地 LAN 上的指定 IP 范围

是否可以以及如何共享 OpenVPN (当前为 Anonine) 连接到本地 LAN 上的指定 IP 地址?本地 LAN 由 Windows 和 Linux 机器以及 Android 设备组成。

当前设置,采用 Ubuntu Server 发行版的服务器:

  • eth0:公共 IP(dhcp,比如说 112.112.112.112),通过 iptables 共享到本地 LAN
  • eth1:本地局域网(192.168.1.1)
  • tap0:OpenVPN(Anonine DHCP 221.221.221.221)带有配置选项 route-nopull

目前我正在使用 iptables 将公共 IP 共享到本地 LAN:

iptables -A FORWARD -s 192.168.1.0/24 -i eth1 -o eth0 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

我想要实现的是将 eth0 互联网连接共享到 IP 地址为 192.168.1.2 - 192.168.1.19 的本地 LAN,并且它们拒绝使用 OpenVPN -connection tap0。

然后,我想将 OpenVPN 连接共享到大于 192.168.1.19 的 ip 地址,并且他们无论如何都拒绝使用 eth0。

我将在本地局域网上的每个客户端上手动添加名称服务器。

--经过数小时的尝试--

当 route-nopull 与 OpenVPN 一起使用时的路由表:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         88.115.14.1     0.0.0.0         UG    0      0        0 eth0
88.115.14.0     *               255.255.224.0   U     0      0        0 eth0
localnet        *               255.255.255.0   U     0      0        0 eth1

并且这个路由在OpenVPN添加路由的时候会用到:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         46.246.18.101   128.0.0.0       UG    0      0        0 tap0
0.0.0.0         88.115.14.1     0.0.0.0         UG    0      0        0 eth0
46.246.18.100   0.0.0.0         255.255.255.128 U     0      0        0 tap0
80.67.8.213     88.115.14.1     255.255.255.255 UGH   0      0        0 eth0
88.115.14.0     0.0.0.0         255.255.224.0   U     0      0        0 eth0
128.0.0.0       46.246.18.129   128.0.0.0       UG    0      0        0 tap0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1

这是我用于将公共 IP(WAN)共享到本地 LAN 的方法:

iptables -A FORWARD -o eth0 -i eth1 -m iprange --src-range 192.168.1.2-192.168.1.19 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m iprange --src-range 192.168.1.2-192.168.1.19 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -m iprange --src-range 192.168.1.2-192.168.1.19 -o eth0 -j MASQUERADE

这是为了尝试共享本地局域网的 OpenVPN

iptables -A FORWARD -o tap0 -i eth1 -m iprange --src-range 192.168.1.20-192.168.1.254 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m iprange --src-range 192.168.1.20-192.168.1.254 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -m iprange --src-range 192.168.1.20-192.168.1.254 -o tap0 -j MASQUERADE

当 OpenVPN 使用 no-route 时,上述 iptables 调整对 eth0 共享部分有效,但对 tap0 无效。如果我允许 OpenVPN 的默认路由,则它对 tap0 有效,但对 eth0 无效。

现在的问题是,我需要如何更改 Ubuntu 服务器上的路由表才能使其正常工作?或者我需要更改客户端的路由表吗?

答案1

是的,这并不难,只是需要做一些工作。你必须将你的 Ubuntu 电脑配置为路由器,互联网上有数十亿个指南。

有几个技巧:

1)不要安装 DHCP/dnsmasq 服务器,没有必要:您的网络上已经有一个了。

2)大多数指南会告诉您:

你有两个以太网接口,eth0 连接到 WAN,eth1 连接到 LAN

这是正确的,但是为了通过 VPN 路由其他电脑,你必须将 tap0/tun0(取决于您使用什么)替换为 WAN 上的接口 eth0。

注意:即使只使用一张以太网卡,你也可以实现同样的功能(我上面说过你需要两张接口,而不是两张卡),但如果你只有一张卡,你将必须学习如何使用和配置维夫斯= 虚拟接口。在这种情况下,您的 PC 将通过接口 eth0:1 连接到您,并且您的 PC 将把此通信转发到接口 tap0。这工作得很好,不用担心,它只是在高峰时段将您的吞吐量减半。

3) 您必须逐一更改您希望此功能工作的所有电脑上的默认路由器的 IP 地址。如果您通过路由器执行此操作,Ubuntu IP 地址也将传递给您希望这样做的电脑不是希望运行该服务。

4)您可以使用 iptables 轻松禁止某些电脑,拒绝来自某些 IP 地址的连接。

这是一项艰巨的工作,而且不易扩展。更好的解决方案是获取带有 DD-WRT/OpenWRT/Tomato 软件的路由器(您可以购买预装 DD-WRT 的几款型号,也可以自己刷新现有的路由器),设置 VLAN,并仅为 VLAN1 的成员提供客户端 OpenVPN 服务。

编辑:

根据您告诉我的内容,您可以通过更改两个 iptables 规则(保留另外两个规则不变)来共享您的 VPN 连接,如下所示:

 iptables -A FORWARD -s 192.168.1.0/24 -i eth1 -o tap0 -m conntrack --ctstate NEW -j ACCEPT
 iptables -t nat -A POSTROUTING -o tap0 -j MASQUERADE

相关内容