You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu 22.04服务器默认使用环回公网IP访问互联网的配置求助

Ubuntu 22.04服务器默认使用环回公网IP访问互联网的配置求助

看起来你的问题核心是服务器默认出站流量用的是bond0接口的私网IP(10.27.28.6),但路由器只允许你环回接口上的公网IP发起的流量访问外网——这就是为什么指定源为公网IP时traceroute能通,直接ping却不行的原因。下面是具体的解决步骤:

1. 修改Netplan配置,给默认路由绑定公网IP作为源

编辑你的Netplan配置文件(通常在/etc/netplan/目录下,比如00-installer-config.yaml),找到bond0段的路由配置,为默认路由添加src参数,指定你loop1接口上的公网IP:

bonds:
  bond0:
    interfaces: [enp1s0f0np0,enp1s0f1np1]
    mtu: 9000
    parameters:
      mode: balance-rr
      mii-monitor-interval: 100
    addresses:
      - 10.27.28.6/30
    routes:
      - to: default
        via: 10.27.28.5
        src: *.*.*.*  # 替换成你loop1上的公网IP

2. 调整内核参数,允许跨接口使用环回IP作为源

因为公网IP配置在环回接口上,默认内核会阻止从bond0这类非环回接口使用该IP作为源,需要修改sysctl参数放行:

创建或编辑/etc/sysctl.d/99-custom-routing.conf文件,添加以下内容:

net.ipv4.conf.all.src_valid_mark=1
net.ipv4.ip_nonlocal_bind=1

加载新的sysctl配置:

sudo sysctl --system

3. 应用配置并验证

执行命令让Netplan生效:

sudo netplan generate
sudo netplan apply

验证默认路由是否已绑定指定源IP:

ip route show default

最后测试ping外网:

ping 8.8.8.8

补充说明

  • 容器能正常访问外网,应该是容器的网络配置已经指定了使用公网IP作为源(比如Docker的端口映射或自定义网络规则),所以不受服务器本身路由的影响。
  • 如果修改后仍有问题,可以检查路由器的ACL或NAT规则,确认是否允许该公网IP从bond0所在的子网发起流量。

备注:内容来源于stack exchange,提问作者tuanle

火山引擎 最新活动