接口上有多个 IP 地址。我想指定其中一个用于输出

接口上有多个 IP 地址。我想指定其中一个用于输出

我在 curlmyip.com 上运行了 curl,结果输出的 ip 地址是错误的。我的 systemd 服务文件是:

[Unit]
Description=Wired Networking
Wants=network.target dibbler-client.service
Before=network.target dibbler-client.service

[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=/etc/conf.d/network
ExecStart=/sbin/ip link set dev ${interface} up
ExecStart=/sbin/ip addr add ${address}/24 dev ${interface}
ExecStart=/sbin/ip addr add ${failover}/32 dev ${interface}
ExecStart=/sbin/ip route add default via ${gateway} src ${failover}
ExecStart=/sbin/ip -6 addr add ${addressv6}/64 dev ${interface}

ExecStop=/sbin/ip addr flush dev ${interface}
ExecStop=/sbin/ip -6 addr flush dev ${interface}
ExecStop=/sbin/ip link set dev ${interface} down

[Install]
WantedBy=multi-user.target

变量有:

interface=eno1
address=88.190.15.135
address6=2001:bc8:300a:dead::b12d
failover=212.83.129.104
broadcast=88.190.15.255
gateway=88.190.15.1

现在,ip addr 给我:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether b8:ac:6f:94:e2:4e brd ff:ff:ff:ff:ff:ff
    inet 88.190.15.135/24 scope global eno1
       valid_lft forever preferred_lft forever
    inet 212.83.129.104/32 scope global eno1
       valid_lft forever preferred_lft forever
    inet6 fe80::baac:6fff:fe94:e24e/64 scope link
       valid_lft forever preferred_lft forever

和 IP 路由:

default via 88.190.15.1 dev eno1  src 212.83.129.104
88.190.15.0/24 dev eno1  proto kernel  scope link  src 88.190.15.135

curlmyip.com 告诉我输出 IP 地址是 88.190.15.135。我该如何更改此输出地址并将其改为 212.83.129.104?

编辑:测试将路由的 src 更改为网关...没有变化。

谢谢!

答案1

看来您的提供商在 IP 路由方面玩了一些肮脏的把戏。您使用的第二个 IP 地址位于完全不同的网络上。您的专用机顶盒位于 AS12322 上,而您的另一个 IP 地址已在 AS12876 上注册到 Tiscali。这似乎有效,因为相关服务提供商正在使其发挥作用。

无论如何,大多数可以建立网络连接的程序都有一个选项,可让您指定源 IP 地址。对于curl命令行,该选项是--interface

curl --interface 212.83.129.104 http://curlmyip.com/

答案2

从您发布的配置来看,您似乎指定 212.83.128.104 作为默认路由的源:

default via 88.190.15.1 dev eno1  src 212.83.129.104

您可能应该更改它,或者将其删除。

编辑:显然我误读了这个问题,以为 212.83.128.104 被用作源 IP。如果我重新阅读正确的话,88.190.15.135 实际上被用作源 IP,而所需的行为是改用 212.83.129.104。为了进行诊断,我们需要更多信息,但我猜您受到了这个错误的影响:https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1093999其中 ip route ... src 在内核中已损坏。

答案3

正如我的专属供应商告诉我的那样,https://twitter.com/online_fr/status/384662183751450624

我添加了这个:-t nat -A POSTROUTING -o eno1 \! -d 10.8.0.0/24 -j SNAT --to-source 212.83.129.104现在一切都很好:)

如果您由 Online.net 托管,这是唯一的方法。

相关内容