Направить трафик с одного ip адреса

Направить исходящий трафик с одного ip адреса иногда бывает нужно когда статических публичных адресов на Linux сервере несколько, но все обращения должны идти только с одного заранее определенного.

Как направить трафик с одного ip адреса на сервере

Доступные интерфейсы и IP адреса, принадлежащие им можно увидеть в выводе ip a

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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 54:52:00:a9:1f:4b brd ff:ff:ff:ff:ff:ff
inet 123.123.123.123/32 scope global eth0
valid_lft forever preferred_lft forever
inet 123.123.124.124/32 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5652:ff:fea9:1f4b/64 scope link
valid_lft forever preferred_lft forever

Здесь для интерфейса eth0 заданы два адреса: 123.123.123.123 и 123.123.124.124. Предположим, что ресурсы на сервере должны быть доступны по обоим адресам, исходящие же пакеты должны уходить только с 123.123.123.123.

Такие настройки можно задать пользуясь той же утилитой ip из пакета iproute2

Прежде всего потребуется выяснить адрес устройства, отвечающего за роутинг — default gateway, в примере это 10.11.11.11

ip route

default via 10.11.11.11 dev eth0
10.1.0.1 dev ipiptun proto kernel scope link src 10.1.0.2
10.11.11.11 dev eth0 scope link

Для понимания ситуации лучше посмотреть таблицу роутинга на сервере

ip route list

default via 10.11.11.11 dev eth0
10.1.0.1 dev ipiptun proto kernel scope link src 10.1.0.2
10.11.11.11 dev eth0 scope link

Далее просто указывается нужный адрес с ip route change

ip route change default via 10.11.11.11 src IP-ADDRESS

Вместо IP-ADDRESS можно подставить адрес, например 123.123.123.123

ip route при нажатии клавиши TAB выдает список доступных опций, сейчас из них были использованы list и change, но в других ситуациях может потребоваться удаление маршрута, добавление нового и т.п.

ip route

add append change del flush get help list monitor replace

Чтобы убедиться в том, что исходящий трафик с одного ip поступает можно обращаться к какому-либо своему ресурсу при помощи curl

curl -I example.com

Затем на сервере, с которого работает сайт проверять access.log

tail  access.log

В нем будет запись с указанием времени и адреса, с которого поступил запрос:

123.123.123.123 — — [10/Jun/2018:16:00:41 +0500] «GET / HTTP/1.0» 200 — «-» «curl/7.52.1» 1554

Читайте про brctl и сетевые мосты