轻敲

轻敲

我在使用 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
    

相关内容