LINUX.ORG.RU
ФорумAdmin

Задать внешний ip адрес, Debian 11

 , ,


0

1

Добрый вечер, целый день пытаюсь побороть вот такую задачку:

Имеется сервер (Debian 11) и несколько дополнительных ip. Подключил их таким образом:

/etc/network/interfaces.d/50-cloud-init

auto lo
iface lo inet loopback
    dns-nameservers 213.186.xx.xx

auto ens3
iface ens3 inet dhcp
    accept_ra 0
    mtu 1500

auto ens3:0
iface ens3:0 inet static
    address 2.2.2.2
    netmask 255.255.255.255

auto ens3:1
iface ens3:1 inet static
    address 3.3.3.3
    netmask 255.255.255.255

# control-alias ens3
iface ens3 inet6 static
    address 2000:4000:400:3000::3000/56
#    post-up route add -A inet6 default gw 2000:4000:400:3000::1 || true
#    pre-down route del -A inet6 default gw 2000:4000:400:3000::1 || true

У сервера исходящие соединения происходят с адреса 1.1.1.1, который является дефолтным и задается через dhcp. А мне нужно сделать, чтобы исходящий трафик шел с адреса 2.2.2.2. Закомментил строки для ipv6, чтобы не мешало.

Что я уже пробовал: Во-первых, подключал новые адреса другим способом, но, как я понял, это без разницы

    post-up /sbin/ifconfig ens3:0 2.2.2.2 netmask 255.255.255.255 broadcast 2.2.2.2
    pre-down /sbin/ifconfig ens3:0 down
    post-up /sbin/ifconfig ens3:1 3.3.3.3 netmask 255.255.255.255 broadcast 3.3.3.3
    pre-down /sbin/ifconfig ens3:1 down

Пробовал изменить маршрут таким способом:

 post-up ip route replace default via 1.1.1.1 src 2.2.2.2

Маршруты сейчас выглядят таким образом $ sudo route

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         1.1.1.1         0.0.0.0         UG    0      0        0 ens3
1.1.1.1         0.0.0.0         255.255.255.255 UH    0      0        0 ens3
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.18.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-e3f27b8fa113

Зачем вы прописываете маршрут через ″ip route″, а показываете результат командой ″route″, где не видно ″src″.

И не понятно, у ваш шлюз по умолчанию выдаётся по dhcp и всегда один или может меняться? То есть, может отключить у dhcp-клиента прописывание маршрута по умолчанию...

Ну ещё всегда остаётся iptables SNAT.

mky ★★★★★ ()

Если у тебя несколько внешних IP и они из одной сети и маршрутизируются через один шлюз провайдера, то тебе нужно в каждом сервисе прописать IP адреса на которых они запущены.

Либо в пакетном фильтре iptables прописать перенаправление порта каждого такого сервиса на определённый исходящий IP адрес.

Если IP адреса не из одной сети и у каждого свой шлюз, то тебе нужно задавать несколько таблиц маршрутизации и правил маршрутизации для каждого внешнего IP адреса.

anonymous ()

и несколько дополнительных ip. Подключил их таким образом

Балдею касею. Где шлюзы?

Где route на всяки локалки?

Bootmen ☆☆☆ ()
Последнее исправление: Bootmen (всего исправлений: 1)
Ответ на: комментарий от mky

Да, шлюз автоматически выдается. А как более правильно отключить шлюз по умолчанию?

Вывод ip route [code] default via 10.10.10.1 dev ens3 10.10.10.1 dev ens3 scope link 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 172.18.0.0/16 dev br-e3f27b8fa113 proto kernel scope link src 172.18.0.1 [/code]

leaderru ()

я бы эти статические адрес не вешал бы на интерфейс с dhcp.

Взял бы какой-нибудь dummy0 и поднял на нём эти адреса статиком.

С входящими коннектами проблем не будет.

А чтобы исходящие соединения были с этих адресов, то проще всего snat сделать.

Менять шлюз по умолчанию с явным указанием src может оказаться бесполезным т.к. dhcp-клиент при обновлении может дергать шлюз по умолчанию.

Твой вариант с доп. адреса был бы уместен если бы те адреса которые ты назначаешь были бы из той же сети, что выдает dhcp.

vel ★★★★★ ()
Последнее исправление: vel (всего исправлений: 1)
Ответ на: комментарий от leaderru

Я не уверен, нужно ли вам отключать шлюз по умолчанию, получаемый по DHCP. Если отключите и провайдер поменяет адрес шлюза, вам придётся прописывать новый адрес. Возможно, вам нужно писать скрипт, который будет прописывать маршрут (маршруты) с учётом шлюза, выданного по dhcp, и цеплять его hook'ом dhcp-клиента https://wiki.archlinux.org/title/dhcpcd_(Русский) ...

А так, зависит от клиента. У вас должен быть dhcpcd, у него в файле конфигурации ″/etc/dhcpcd.conf″ можно дописать ″nogateway″.

А ещё можно в ″post-up″ прописывать не default-маршрут, а два маршрута — к 0.0.0.0/1 и 127.0.0.0/1, и тогда не важно, что прописано в default.

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

Да, шлюз автоматически выдается. А как более правильно отключить шлюз по умолчанию?

да просто удали его хуком post-up в том же соединении

А вообще в настройках dhclient вроде есть опции, чтобы он шлюз не менял.

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