我在使用 OpenVPN 将公共 IP 隧道传输到远程 VPS 时遇到了一些困难。我有一台 Linux 服务器,其中包含 32 个公共 IP 地址块192.0.2.160/27
,名为服务器 1,以及绑定到eth0
同一台服务器的另一个公共 IP 地址:203.0.113.43
。
我有另一台 Linux 机器,服务器 2,位于其他地方的 NAT 后面。我希望能够在服务器 1这样客户服务器 2,可以使用子网内的IP地址192.0.2.160/27
。
我已经关注以下指南在 ServerFault 上,我正尝试使用 TAP 将以太网桥接与 OpenVPN 结合使用。
在服务器 1 上,网络配置如下所示(出于文档目的,我已替换了 IP - 请参阅 RFC5737):
服务器 1 /etc/network/interfaces
auto eth0
auto br0
iface br0 inet static
address 203.0.113.43
netmask 255.255.255.0
gateway 203.0.113.1
pre-up openvpn --mktun --dev tap0
bridge_ports eth0 tap0
bridge_fd 3
然后我运行 openvpn服务器 1使用openvpn --dev tap0
,当我输入以下内容时服务器 2:
openvpn --remote 203.0.113.43 --dev tap0 --route-gateway 203.0.113.1 \
--redirect-gateway def1 --ifconfig 192.0.2.160 255.255.255.224
连接已建立,但无法 ping192.0.2.160
除以下计算机之外的任何其他计算机服务器 2(甚至不能在服务器 1)。
我确实相信我遗漏了一些东西,但我似乎无法弄清楚。
我还要补充一点,我已/etc/sysctl.conf
在服务器 1。
如果有人可以完成此配置或建议实现此目的的替代方法,我们将不胜感激。
[编辑 1 - 感谢 AB]
托管服务提供商是 Heficed,他们在这里解释了如何添加额外的公共 IP(无论如何在 CentOS 上):https://kb.heficed.com/en/articles/2854555-adding-ip-to-your-network-interface
答案1
根据这个Heficed 的知识库文章:
当你购买了具有主 IP 并分配了附加 IP 的服务器时,附加 IP 静态路由到您的主 IP,因此在您的 NIC 上配置 IP 时不需要网关或广播地址。
server1 的主 IP 地址用于访问其他 IP 地址,因此可以想象 server1 的路由器(如果也是 Linux)可能具有类似以下设置:
ip route add 192.0.2.160/27 via 203.0.113.43
没有必要eth0桥接并桥接将为实现目标带来更多困难。最终必须使用不常见的路由(仍然使用不属于 IP LAN 的网关)的复杂性是不值得的。
所以服务器1的网络配置可以简化为:
auto eth0
iface eth0 inet static
address 203.0.113.43
netmask 255.255.255.0
gateway 203.0.113.1
更改配置时请注意连接丢失,您应该有一个远程/虚拟控制台访问作为备份。
以下是无需桥接主机主接口、使用路由或使用 TAP(可能允许例如服务器1运行 DHCP 服务器服务器2的一方)或与 TUN。
为了保持 32 个 IP 地址可用,使用了一些不常见的路由设置,OpenVPN 在这方面存在一些问题。因此,使用脚本来覆盖该--ifconfig
选项。如果选择从 /32 池中牺牲 3 个 IP 地址:一个分配给服务器1以及 192.0.2.160 和 192.0.2.191 用作网络和广播网络地址,那么一切都变得简单,不需要额外的脚本。
笔记:
配置服务器1作为 IPv4 路由器,对于下述任何方法都需要,例如可以在
/etc/sysctl.conf
或中取消注释/添加此条目/etc/sysctl.d/<somefile>
:net.ipv4.ip_forward=1
并在配置更改后立即以 root 身份运行此命令:
sysctl -w net.ipv4.ip_forward=1
命令演变:
openvpn --mktun --dev {tap,tun}0
可以用下列之一替换:
ip tuntap add dev tap0 mode tap ip tuntap add dev tun0 mode tun
ip tuntap
2009年“仅”出现。
轻敲
简单方法
为了保持真正简单,不使用永久的 TAP 接口(可以随意更改此配置)。
它将消耗 192.0.2.160、192.0.2.161(分配给服务器1) 并将 192.0.2.191 移出池。
服务器1:
openvpn --dev tap --ifconfig 192.0.2.161 255.255.255.224
服务器2:
openvpn --remote 203.0.113.43 --dev tap --ifconfig 192.0.2.162 255.255.255.224 --route-gateway 192.0.2.161 --redirect-gateway def1
您还可以将 192.0.2.163 和 192.0.2.190 之间的其余 28 个 IP 地址中的任何一个添加到服务器2在其任何接口上(例如:将其分配给tap0或者分配到洛所以它不会消失甚至更早):
ip address add 192.0.2.163/32 dev lo
保持所有 32 个地址可用的方法
服务器1:
添加 TAP 接口
/etc/network/interfaces
以简化服务器1的 OpenVPN 的配置:auto tap0 iface tap0 inet static pre-up ip tuntap add dev tap0 mode tap || : address 10.10.10.10/32 up ip route add 192.0.2.160/27 dev tap0 down ip link delete dev tap0
如果刚完成则运行
ifup tap0
并运行:openvpn --dev tap0
服务器2:
有一个名为的可执行文件
up-cmd-server2.sh
(里面使用的变量将从 OpenVPN 继承):#!/bin/sh ip address add "$ifconfig_local"/32 dev "$dev" ip link set dev "$dev" up ip route add "$route_vpn_gateway"/32 dev "$dev"
并运行:
openvpn --remote 203.0.113.43 --dev tap --ifconfig-noexec --ifconfig 192.0.2.160 255.255.255.255 --route-gateway 10.10.10.10 --redirect-gateway def1 --script-security 2 --up up-cmd-server2.sh
IP 地址 10.10.10.10 在 VPN 之外永远不会被看到,即使在 VPN 内部也只有在出现错误时才会被看到,例如路由追踪命令,或者当然如果它用于到达服务器1VPN 连接,而不是 Internet 连接。路由追踪从外部运行将显示来自 203.0.113.43 的错误。
那么在服务器1?
如果一些流量应该通过 VPN 路由,而一些流量是本地流量,那么tap0上面的设备可以再次被连接到网桥。该网桥仍将用于路由 LAN:它不会桥接eth0并且应该为其分配 10.10.10.10/32,而不是tap0除此之外,上述设置和说明仍然适用。容器可以使用韦特链接和 VM 附加 TAP 链接,全部受制于桥接器。
隧道
如果需要通过隧道使用以太网的相关属性,TAP 非常有用,例如服务器1运行 DHCP 服务器服务器2或者实际上通过 VPN 共享 LAN 流量(TUN 也可以用于混合使用,只需进行一些路由调整和代理 ARP,但配置复杂性可能不值得)。否则,可以使用 TUN 来减少开销(例如:IP 数据包小于以太网帧且没有 ARP)。由于这两种情况都是路由,因此设置几乎与上述相同。
简单方法
服务器1:
openvpn --dev tun --topology subnet --ifconfig 192.0.2.161 255.255.255.224
服务器2:
openvpn --remote 203.0.113.43 --dev tun --topology subnet --ifconfig 192.0.2.162 255.255.255.224 --route-gateway 192.0.2.161 --redirect-gateway def1
保持所有 32 个地址可用的方法
服务器1:
添加 TUN 接口
/etc/network/interfaces
以简化服务器1的 OpenVPN 的配置:auto tun0 iface tun0 inet static pre-up ip tuntap add dev tun0 mode tun || : address 10.10.10.10/32 up ip route add 192.0.2.160/27 dev tun0 down ip link delete dev tun0
如果刚完成则运行
ifup tun0
并运行:openvpn --dev tun0
服务器2:
up-cmd-server2.sh
在 TAP 版本中使用与上面相同的方法并运行:openvpn --remote 203.0.113.43 --dev tun --topology subnet --ifconfig-noexec --ifconfig 192.0.2.160 255.255.255.255 --route-gateway 10.10.10.10 --redirect-gateway def1 --script-security 2 --up up-cmd-server2.sh