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


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

Сказать спасибо