Как маршрутизировать разные домены на разные IP адреса внутренней сети?
=========================================================================

 У меня есть домен и VPS сервер (с одним IPv4 и одним IPv6 адресом), на котором я держу различные сервисы. Сервисы, в основном, находятся в Docker контейнерах, у каждого контейнера на машине есть свой внутренний IP адрес.   

  

Я хочу, чтобы по различным именам (postgres.example.com, www.example.com и т.д.) сервер маршрутизировал на различные контейнеры. Раньше я пользовался Nginx как прокси, но Nginx может маршрутизировать по доменным именам только HTTP трафик, а у меня многие сервисы работают напрямую через TCP/UDP.   

  

Как можно реализовать такую маршрутизацию? 

 Из name-based сервисов (т.е. таких, которые могут различать, по какому имени к ним обратились) - есть только два:1. E-mail (UUCP, SMTP) - изначально;
2. HTTP - начиная с версии, кажется, 1.1.

Остальные известные мне сервисы могут разделяться либо по IP-адресаам, на которые обращаются клиенты (по Вашим условиям - это невозможно); либо по портам; ну, можно ещё отделить TCP от UDP и прочих протоколов этого уровня.  

  

"postgres" и "www", которые Вы привели как пример - различаются по портам. Поэтому не надо городить огород.  

  

Ещё есть вариант - клиенты коннектятся к Вашему серверу по VPN; попадают в как бы локальную сеть, связывающую докеры; и дальше резвятся с разными IP-адресами, доступными им напрямую.  

  

PS: Вы либо не очень понимаете работу протоколов/сервисов; либо невнятно сформулировали задачу. Впрочем, здесь почти все вопросы такие. Да и не здесь - тоже: большинство вопросов происходят от непонимания, потому криво сформулированы. 

 По именам никак, можно по портам, пробрасывая на маршрутизаторе каждый порт на свой сервер. 

 1) Никаких проблем. Если имена виртуальных хостов соответствуют Сервису, то проблема только в NAT-е, те проброс порта из Docker контейнера на внешний IP. Например, Есть Nginx на Docker контейнере на 80 порту, там вы держите 10 Веб "*серверов*"(виртуальных хостов), следовательно надо пробросить на внешний IP 80 порт. А дальше прописывайте все виртуальные хосты домена на внешний IP. Веб сервер Docker контейнера будет отдавать нужный контент. С postgres аналогично, ну будет у вас 10 баз в одном контейнере...  

2) Проблемы. Если вы хотите, например, каждый виртуальный хост держать в отдельном Docker контейнере. Тогда вам надо каждому виртуальному хосту давать разный порт, например для веб сервера, 80,81,82,...,90. А также, ставить еще один Docker контейнер с Nginx как кеширующий и с него пробрасывать 80 порт на внешний IP. Но это только для Веб.   

Для postgres придется просто менять порты, например, 54321, 54322, .... 54330.  

  

Тут все относительно просто и можно разными (немного другими) способами пойти. 

> Как можно реализовать такую маршрутизацию?

Просто маршрут добавляете до нужного адреса и все.  

В чем проблема?  

Проблемы могут возникнуть только при использовании серых адресов- они не маршрутизируются в глобальную сеть.