Направить исходящий трафик с одного 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 адреса поступают запросы к веб-серверу
Чтобы убедиться в том, что исходящий трафик с одного 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 и сетевые мосты