Что я хочу решить
У меня есть файл конфигурации, который я не хочу менять, потому что он используется многими людьми и управляется кем-то другим. У него есть записи, похожие на это:
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