두 가지 작업을 수행했지만 세 번째 작업을 수행하고 싶습니다. 동적 IP가 있는 원격 Raspberry Pi(Raspbian 실행)를 서핑용 SOCKS 프록시로 사용하고 싶습니다. 하지만 이 Rpi는 역방향 터널을 통해서만 액세스할 수 있습니다.
그래서 나는 가지고있다:
- 내 로컬 데스크톱(동적 IP 뒤)
- 다른 나라의 Raspberry Pi(동적 IP 뒤에 있음)
- 고정 IP를 사용하는 전용 서버
나는 이 모든 컴퓨터에 대한 모든 권한을 갖고 있지만 로컬 데스크톱과 원격 Raspberry Pi 앞에 있는 라우터는 제어할 수 없습니다.
다음은 잘 작동합니다.
ssh -D 5222 [email protected] -N [email protected]
이를 통해 마치 IP aaa.bbb.ccc.ddd의 서버에서 서핑하는 것처럼 Firefox 또는 Chromium을 사용하여 서핑할 수 있습니다. (내가 해야 할 일은 포트 5222로 localhost를 사용하도록 SOCKS를 구성하는 것뿐입니다.)
다음도 잘 작동합니다.
ssh -t [email protected] "ssh rspi@localhost -p 32402"
Raspberry Pi는 autossh
항상 고정 IP를 사용하여 서버에 대한 역방향 터널을 설정합니다(이 경우 포트 32402에 있다는 것을 알고 있습니다. 포트가 변경되면 사용 중인 포트를 알려주므로 문제가 없습니다).
따라서 "이중 SSH 명령"을 사용하면 로컬 데스크톱의 터미널에서 Rapsberry Pi를 제어하고 고정 IP가 있는 서버를 통해 전송할 수 있습니다.
여태까지는 그런대로 잘됐다. 이제 이 두 가지가 제대로 작동한다는 것을 알았으니 원격 Raspberry Pi를 SOCKS 프록시로 사용하여 서핑할 수 있게 해주는 마법이 무엇인지 궁금합니다. (저는 Raspberry Pi가 역방향 SSH 터널을 설정하는 포트를 항상 알고 있다는 점을 기억하세요.)
원격 Raspberry Pi 또는 전용 서버에서 수정/구성을 수행해야 합니까, 아니면 로컬 데스크톱에서 올바르게 설정하기만 하면 됩니까?
답변1
desktop$ ssh -J [email protected] -D 5222 -p 32402 rspi@localhost
글쎄, 그게 실제로 필요한 전부입니다.
ssh
명령을 실행하기에는 너무 오래된 경우 -J
위의 줄을 다음 두 명령으로 바꿀 수 있습니다(두 터미널 모두에서 또는 -f -N
첫 번째 명령을 백그라운드에 두는 것과 같은 옵션을 사용하여).
desktop$ ssh -L 32402:localhost:32402 [email protected]
desktop$ ssh -D 5222 -p 32402 rspi@localhost
이 -J
옵션은 두 번째 이전 방법에서 첫 번째 명령을 실행하지 않는 지름길일 뿐입니다.