Что я хочу решить
У меня есть файл конфигурации, который я не хочу менять, потому что он используется многими людьми и управляется кем-то другим. У него есть записи, похожие на это:
serviceAlpha: localhost:8081
serviceBravo: localhost:8082
serviceCharlie: localhost:8083
...
Я хотел бы иметь локальные порты, каждый из которых сопоставлен с удаленным хостом и портом, без необходимости входа (туннеля) через SSH.
Например:
localhost:8081 -> serviceAlpha:8080
localhost:8082 -> serviceBravo:8080
localhost:8083 -> serviceCharlie:8080
...
Что я пробовал
Я прочитал, что /etc/hosts не может решить эту проблему.
Я попытался с помощью pf (см. Здесь):
echo "
rdr pass inet proto tcp from any to any port 8081 -> serviceAlpha port 8080
" | sudo pfctl -ef -
Когда я запускаю pfctl -s nat , я получаю:
No ALTQ support in kernel
ALTQ related functions disabled
rdr pass inet proto tcp from any to any port = 8081 -> ww.xx.yy.zz port 8080
Когда я запускаю curl -X GET http://localhost:8081/ , у меня не получается Failed to connect to localhost port 8081: Operation timed out . То же самое происходит, когда я заменяю localhost на 127.0.0.1 .
Когда я запускаю curl -X GET http://ww.xx.yy.zz:8080/ , я получаю ожидаемый ответ.
Я также пробовал различные команды socat , в том числе:
socat tcp-listen:8081 tcp:ww.xx.yy.zz:8080
curl -X GET http://127.0.0.1:8081/health
> curl: (7) Failed to connect to 127.0.0.1 port 8081: Operation timed out
socat tcp:127.0.0.1:8081 tcp:ww.xx.yy.zz:8080
curl -X GET http://127.0.0.1:8081/health
> curl: (7) Failed to connect to 127.0.0.1 port 8081: Operation timed out
> socat: 2019/02/14 16:27:02 socat[31221] E connect(5, LEN=16 AF=2 127.0.0.1:8081, 16): Operation timed out
