Linux

介面上的多個 ip 地址。我想指定其中之一進行輸出

  • September 30, 2013

我在 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 … 沒有更改。

謝謝!

看來您的提供商正在使用 IP 路由玩一些骯髒的把戲。您使用的第二個 IP 地址位於完全不同的網路上。您的 dedibox 在 AS12322 上,而您的其他 IP 地址在 AS12876 上註冊到 Tiscali。這似乎可行,因為相關的服務提供商正在使其發揮作用。

無論如何,大多數可以建立網路連接的程序都有一個選項可以讓您指定源 IP 地址。對於curl命令行,該選項是--interface.

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

從您發布的配置看來,您正在指定 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 where ip route … src 在核心中被破壞。

引用自:https://serverfault.com/questions/542424