У меня только что есть 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
}