我有一台服务器(Ubuntu 18.04),在同一个网络设备中有多个 IP 地址。
这是ip a
回报:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
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: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 06:9b:1c:00:00:2a brd ff:ff:ff:ff:ff:ff
inet 191.XXX.XXX.51/23 brd 191.XXX.XXX.255 scope global dynamic ens3
valid_lft 80087sec preferred_lft 80087sec
inet 179.XXX.XXX.0/32 scope global ens3
valid_lft forever preferred_lft forever
inet 179.XXX.XXX.1/32 scope global ens3
valid_lft forever preferred_lft forever
inet 179.XXX.XXX.2/32 scope global ens3
valid_lft forever preferred_lft forever
inet 179.XXX.XXX.3/32 scope global ens3
valid_lft forever preferred_lft forever
inet6 fe80::XXX:XXX:XXX:2a/64 scope link
valid_lft forever preferred_lft forever
这是我的route -n
回报:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 191.XXX.XXX.1 0.0.0.0 UG 100 0 0 ens3
191.XXX.XXX.0 0.0.0.0 255.255.254.0 U 0 0 0 ens3
191.XXX.XXX.1 0.0.0.0 255.255.255.255 UH 100 0 0 ens3
所以我有一个主公共 IP:191.XXX.XXX.51 和另外 4 个辅助公共 IP:179.XXX.XXX.0-3
我的最终目标是使用我的辅助 IP 进行传出连接,我想我可以使用路由表或 iptables 来实现这一点,但我不知道如何做。
例如:如果我 ping google.com:
user@server:# ping google.com
PING google.com (216.58.202.142) 56(84) bytes of data.
64 bytes from gru06s29-in-f142.1e100.net (216.58.202.142): icmp_seq=1 ttl=57 time=1.01 ms
64 bytes from gru06s29-in-f142.1e100.net (216.58.202.142): icmp_seq=2 ttl=57 time=1.05 ms
64 bytes from gru06s29-in-f142.1e100.net (216.58.202.142): icmp_seq=3 ttl=57 time=0.965 ms
64 bytes from gru06s29-in-f142.1e100.net (216.58.202.142): icmp_seq=4 ttl=57 time=0.993 ms
^C
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 0.965/1.005/1.055/0.050 ms
一切正常,但如果我选择另一个 IP 作为 ping 源:
ping -I 179.XXX.XXX.1 google.com
ping 数据包丢失率为 100%。
tinyproxy 也发生了同样的事情,如果我配置使用辅助 IP 作为传出 IP,连接就会失败。
PS. 如果我从服务器外部 ping 它们,辅助 IP 就可以正常工作。
那么,如何才能让辅助 IP 能够连接到互联网呢?
答案1
这很简单。您只需用 src 属性覆盖默认路由即可。此值将用作传出连接的源地址。
ip route replace 0/0 via <gw-ip> src <sec-ip-addr>