문제 상황
- apt upgrade 도중 내려받기 중간에 멈춰버림. 인터넷은 당연히 연결되어 있는 상태.
- 일반적인 현상이 아니라 정확한 원인을 모르나, 다른 네트워크에서는 이런 현상이 발생하지 않는다. 무언가 내부 네트워크에서 사용되는 캐시 서버 문제인 것 같다.
- 다른 네트워크에 있는 컴퓨터를 사용해서 apt 패키지를 다운로드 받고 싶음.
필요한 것
- SSH 가능한 외부 서버 (Dynamic Port Forwarding)
- tsocks 설치하기 ($ sudo apt install tsocks)
해야 할 일
1) /etc/tsocks.conf 편집하기
# Default server
# For connections that aren't to the local subnets or to 150.0.0.0/255.255.0.0
# the server at 192.168.0.1 should be used (again, hostnames could be used
# too, see note above)
server = 127.0.0.1
# Server type defaults to 4 so we need to specify it as 5 for this one
server_type = 5
# The port defaults to 1080 but I've stated it here for clarity
server_port = 12345
SSH의 Dynamic port forwarding을 사용할 예정. Dynamic port forwarding은 SSH 서버를 마치 프록시 (SOCKS) 서버처럼 동작하게 한다. 서버 주소는 127.0.0.1 (localhost), 그리고 포트는 아무거나 골랐다 (12345).
2) Dynamic port forwarding 설정하기
ssh -D 12345 <server-address> -N
-D <port_number> 으로 dynamic port forwarding 을 설정한다. Shell 이 필요한 것은 아니므로 -N 옵션도 같이 넣었다.
3) tsocks를 붙인다.
sudo tsocks apt upgrade
재미있어 보이는 것은 tsocks의 동작 원리이다. 자세히는 파보지 않았지만, 리눅스에서 제공하는 socket 관련 함수들을 다시 매핑하여 SOCKS 프록시를 설정한 것처럼 만들어준다.
관련 링크
tsocks를 사용하지 않고 apt.conf 에서 Acquire::http::Proxy 를 설정하는 방법도 있다. 그러나 별도로 프록시 서버를 가지고 있어야 한다.