AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-548811

hunmonk's questions

Martin Hope
hunmonk
Asked: 2020-03-23 16:21:34 +0800 CST

阻止 Google Compute 实例配置第二个网络接口

  • 2

我正在运行 Debian Buster 的 Google Compute Engine 中启动一个 VM,并使用两个网络接口对其进行配置。

第一个使用临时 IP 配置,并分配给通过 DHCP 配置的公共可路由网络。我想保持原样。

第二个接口使用静态 IP 配置,并分配给专用网络。我想阻止 GCE 使用 DHCP 来配置这个接口,而是使用 systemd-networkd 自己来配置它,以便轻松添加一些自定义路由。

虽然 systemd-networkd 配置确实成功,但问题是当机器重新启动时,GCE 的 DHCP 设置在 systemd-networkd 设置之后运行,并覆盖了我的自定义配置。

到目前为止,我已经尝试了很多方法来解决这个问题,包括:

  • 禁用 /etc/network/interfaces 中 /var/run/interfaces.d 的条目
  • 添加自定义 systemd 服务以在 GCE 的网络服务之后运行

到目前为止唯一有效的是一个可怕的脚本黑客在启动后等待 30 秒,然后再次启动 systemd-networkd 以覆盖 GCE 配置。

我可以在操作系统级别进行一些更清晰的配置更改,或者在网络/服务器设置期间进行配置设置,以防止 GCE 自动配置第二个网络接口?

编辑#1:

这是我更喜欢使用的 systemd-networkd 配置示例:

[Match]
Name=ens5

[Network]
Address=10.1.3.30/32
LinkLocalAddressing=no


[Route]
Destination=10.1.3.1/32
Scope=link

[Route]
Gateway=10.1.3.1
Destination=10.1.3.0/24
GatewayOnlink=yes

[Route]
Gateway=10.1.3.1
Destination=10.1.1.0/24
GatewayOnlink=yes

[Route]
Gateway=10.1.3.1
Destination=10.1.2.0/24
GatewayOnlink=yes

[Route]
Gateway=10.1.3.1
Destination=10.10.0.0/24
GatewayOnlink=yes

使用此配置,我可以在接口上设置其他路由到其他子网。请注意,这些其他子网可能在也可能不在 GCP 上。

上述配置有效,即使我必须将 10.1.3.30 静态 IP 地址声明为我的 GCE 服务器设置的一部分。问题只是我不能让 GCE 停止对接口进行自己的配置,这会覆盖上面的配置。在 Azure 上,我可以简单地注释掉对in的source引用。/var/run/network/interfaces.d/etc/network/interfaces

至于为什么我更喜欢这种设置,这是一种通过服务器配置管理软件设置内部网络的优雅方法——我只需将上述配置放入/etc/systemd/network/并发出systemctl enable systemd-networkd && systemctl restart systemd-networkd,它会处理配置接口并将配置设置为也在启动时发生。

更新#1:

我已经在 GCP 的问题跟踪器中提交了https://issuetracker.google.com/issues/153513472,希望他们能解决。当他们这样做时,我会相应地更新问题。

更新#2:

经过一轮付费 GCP 支持后,他们向我指出了另一个持续存在的问题:https ://issuetracker.google.com/issues/167371074

支持代理还建议其他用户只需放置 cron 脚本以定期重新启动网络。

我已经根据我的特定网络需求调整了这个建议,并使用了以下 crontab 条目:

* * * * * /usr/bin/test -z "$(/sbin/ip route | /bin/grep "10.1.1.0/24")" && /bin/systemctl restart systemd-networkd

其中 '10.1.1.0/24' 是一个子网,我知道在我的路由配置中不应丢失。

更新#3:

最后,一个干净而令人满意的答案!谷歌工程师告诉我,google-guest-agent.service作为他们在 Debian 系统上的来宾环境的一部分运行的它有一个网络守护进程,当它重新配置任何接口时,它会dhclient直接调用。看起来dhclient这种方式会消除现有的路线。鉴于此,一个简单的解决方法是通过在/etc/dhcp/dhclient-exit-hooks.d/.

就我而言,我在以下位置添加了以下脚本/etc/dhcp/dhclient-exit-hooks.d/systemd-networkd:

case $reason in
    BOUND|RENEW|REBIND|REBOOT)
        systemctl restart systemd-networkd.service
        ;;
esac

这似乎解决了问题,包括重新启动。

dhcp google-compute-engine systemd-networkd
  • 1 个回答
  • 417 Views
Martin Hope
hunmonk
Asked: 2020-03-03 21:47:48 +0800 CST

无法通过 Google Compute Engine VM 上的 systemd-networkd 配置 Wireguard 设备

  • 2

Google Compute Engine VM 上的 Debian Buster 映像,我将这个 systemd-networkd 配置放置在 /etc/systemd/network/wg0.netdev 以配置 Wireguard 设备:

[NetDev]
Name=wg0
Kind=wireguard

[WireGuard]
PrivateKey = XXXXX
ListenPort = 51820

[WireGuardPeer]
Endpoint = XXXXX:51820
PublicKey = XXXXX
AllowedIPs = XXXXX/32
AllowedIPs = XXXXX/24

启动 systemd-networkd 服务时,出现此错误:

Starting Network Service...
Failed to generate predictable MAC address for wg0: No such file or directory
Could not load configuration files: No such file or directory
systemd-networkd.service: Main process exited, code=exited, status=1/FAILURE

奇怪的是:

  1. 我可以通过手动配置而不是通过 systemd 在 GCP 服务器上成功启动 wg0 接口
  2. 我可以在其他提供商虚拟机(测试 Vultr 和本地 Vagrant)上成功使用上述 systemd-networkd 配置

因此,该错误仅发生在 GCP 服务器上使用 systemd-networkd 配置的特定组合中。

我在所有服务器上使用完全相同的 Linux 内核和 Wireguard 版本。如果它是特定于 GCP 的配置,我似乎找不到任何相关文档。

google-compute-engine wireguard systemd-networkd
  • 2 个回答
  • 1130 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve