У меня есть сервер (Ubuntu 18.04) с несколькими IP-адресами на одном сетевом устройстве.
Это ip a
return:
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
А это мой маршрут -n
return:
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, но я не Не знаю как.
Например: Если я пингую 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 -I 179.XXX.XXX.1 google.com
Пинг имеет 100% потерю пакетов.
То же самое происходит с tinyproxy, если я настроить использование вторичного IP-адреса в качестве исходящего IP-адреса, соединение просто не выполняется.
PS. Вторичный IP-адрес работает, если я пингую их извне сервера.
Итак, как мне сделать дополнительный IP-адрес полезным для выхода в Интернет?
Это довольно просто. Вы просто перезаписываете маршрут по умолчанию атрибутом src. Это значение будет использоваться как исходный адрес для исходящих соединений.
ip route replace 0/0 via <gw-ip> src <sec-ip-addr>