Назад | Перейти на главную страницу

Как перенаправить определенный IPv6-адрес и порт на другой порт?

У меня только что есть VPS с IPv4-адресом, а также с настроенным набором IPv6-адресов, и я новичок в маршрутизации в Ubuntu / Linux. Я хотел бы направлять запросы с определенным IPv6 и портом (например, порт 80) в качестве пункта назначения на определенный порт на этом адресе (например, порт 8000).

В псевдокоде я хочу следующее:

if($DESTINATION_IP == [specific IPv6-address]:80)
    route to port: 8000

Когда приложение прослушивает [конкретный IPv6-адрес]: 8000, оно будет получать запросы, отправленные на [конкретный IP-адрес]: 80. Но когда я использую [другой IPv6-адрес]: 80, он не будет маршрутизироваться на этот порт.

Это кажется довольно простым, и я думаю, что мне придется использовать ip6tables для работы, но я не знаю, как этого добиться.

Большое спасибо.

Вы не можете перенаправлять порты с помощью ip6tables, поскольку соответствующие цели netfilter предназначены только для IPv4 (из-за их связи с NAT, от которого избавляется IPv6).

Лучшее решение, конечно, - заставить приложение сначала прослушивать правильный адрес и порт, а затем отказываться от привилегий.

Если вам действительно нужно это сделать, потому что у вас плохо написанное приложение, которое не может прослушивать порты ниже 1024, настройте xinetd для перенаправления портов. Например (это не проверено):

service dumb-app
{
    flags       = IPv6
    type        = UNLISTED
    socket_type = stream
    protocol    = tcp
    wait        = no
    user        = root
    bind        = 2001:db8::f04d
    port        = 80
    redirect    = ::1 8000
}