LINUX.ORG.RU
решено ФорумAdmin

Связь с одним из серверов через вторичный ip-адрес

 , ,


0

1

Основной адрес моего сервера XX.XX.XX.XX (сетевой интерфейс ens3) и я не хочу его «светить» когда захожу на один из сайтов.

Для этого я купил адрес YY.YY.YY.YY и он подключен к моему сетевому интерфейсу как ens3:0

ubuntu@server$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether ----------------- brd ff:ff:ff:ff:ff:ff
    inet XX.XX.XX.XX/32 brd XX.XX.XX.XX scope global ens3
       valid_lft forever preferred_lft forever
    inet YY.YY.YY.YY/32 brd YY.YY.YY.YY scope global ens3:0
       valid_lft forever preferred_lft forever
    inet6 ------------------/64 scope link 
       valid_lft forever preferred_lft forever

Теперь мне нужно чтобы пакеты отправляемые на сервер ZZ.ZZ.ZZ.ZZ имели в качестве источника мой вторичный ip YY.YY.YY.YY. А на все остальные сервера - имели стандартный ip XX.XX.XX.XX

Чтобы сервер ZZ.ZZ.ZZ.ZZ не был совсем абстрактный я предлагаю сервис ifconfig.me который сообщает мой ip-адрес. Его ip адрес 34.117.59.81.

ubuntu@server$ curl ifconfig.me
XX.XX.XX.XX

Всё работает - это мой первый ip.

Мои вопросы:

  • Как сделать чтобы высвечивался второй ip, но только для этого сайта?
  • Это делается через маршрутизацию ip route add или же через iptables SNAT?
  • можно ли для этого использовать ufw?
  • боюсь экспериментировать на проде, мб кто подскажет строчку или доку

Это делается системным вызовом bind(). Обычно коннекты открываются так: socket(), connect(адрес-куда-подключаться), ядро само выбирает адрес. А можно так: socket(), bind(адрес-откуда-подключаться), connect(адрес-куда-подключаться).

У curl-а наверно опция есть куда забиндить сокет на локальной стороне (т.е. вызвать bind() между socket и connect). Для wget это --bind-address=YY.YY.YY.YY

Если делаешь коннекты из пхп то там stream_context_create() и опция bindto в нём.

firkax ★★ ()
Последнее исправление: firkax (всего исправлений: 2)

Это делается через iptables SNAT

Роуты вообще не работают с алиасами, так что с этим есть серьезные проблемы.

Рекомендую поставить shorewall и настроить файрволл и все днаты снаты и т.д. через него.

AVL2 ★★★★★ ()
Ответ на: комментарий от AVL2

Рекомендую поставить shorewall и настроить файрволл и все днаты снаты и т.д. через него.

Просто интересно, а какой высокий смысл прилеплять сверху ещё какой-то костыль?

anc ★★★★★ ()
Ответ на: комментарий от anc

shorewall не костыль, а компилятор правил, который позволяет оперировать понятием зона, провайдер и пр.

AVL2 ★★★★★ ()
Ответ на: комментарий от AVL2

Я правильно понял, он не использует консольный iptables?

anc ★★★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.