6

I ran curl on curlmyip.com, and I got the wrong output ip address. My systemd service file is:

[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

And variables are:

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

Now, ip addr give me:

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

and ip route:

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 tell me that the output ip address is 88.190.15.135. How can I change this output address and make it 212.83.129.104?

EDIT: tested to change the src of the route to the gateway... No changes.

Thanks!

Cubox
  • 118

3 Answers3

10

It appears your provider is playing some dirty tricks with IP routing. The second IP address you are using is on a completely different network. Your dedibox is on AS12322, while your other IP address is registered to Tiscali on AS12876. This seems to work because the involved service providers are making it work.

Anyway, most programs that can make network connections have an option that lets you specify the source IP address. For the curl command line, that option is --interface.

curl --interface 212.83.129.104 http://curlmyip.com/
Michael Hampton
  • 252,907
2

From the configuration you've posted it looks like you are specifying 212.83.128.104 as the source for your default route:

default via 88.190.15.1 dev eno1  src 212.83.129.104

You should probably change that, or remove it.

EDIT: Apparently I misread the question and thought that 212.83.128.104 was being used as the source IP. If I re-read it correctly, 88.190.15.135 is actually being used as the source IP, and the desired behavior is to have 212.83.129.104 used instead. To diagnose, we'll need more information, but my guess is that you are being affected by this bug: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1093999 where ip route ... src is broken in the kernel.

Jed Daniels
  • 7,452
  • 2
  • 37
  • 43
0

As my dedicated provider told me, https://twitter.com/online_fr/status/384662183751450624.

I added this: -t nat -A POSTROUTING -o eno1 \! -d 10.8.0.0/24 -j SNAT --to-source 212.83.129.104 and everything is now fine :)

If you are hosted by Online.net, it's the only way.

Cubox
  • 118