머리말
얼마 전 서버를 이전하면서 캠퍼스 네트워크 환경 밖으로 옮겼지만, 연구실의 GPU 서버는 여전히 캠퍼스 네트워크 환경 내에 있어 직접 연결할 수 없게 되었고, 학교 VPN을 사용해야만 접근할 수 있었습니다.
하지만 알다시피 학교 공식 VPN의 사용 경험은 매우 좋지 않아서, 오픈소스 도구를 활용해 연구실 내부에서 사용할 수 있는 자체 솔루션을 구현해보기로 했습니다.
그래서 zerotier를 사용해 가상 LAN을 구성하는 방법을 생각했습니다 (구체적인 원리는 여기서 자세히 설명하지 않겠습니다. 가상 LAN에 가입하면 기기들이 같은 LAN에 있지 않아도 가상 LAN IP를 통해 P2P 연결이 가능해져 뛰어난 경험을 제공한다는 점만 알면 됩니다).
하지만 연구실의 서버는 일반적으로 인터넷에 연결되어 있지 않기 때문에 서버를 zerotier에 직접 연결할 수 없어서 다른 방법을 모색해야 했습니다.
다음은 제 전체 해결 방안입니다.
자체 zerotier planet 구축
이 부분은 아래 Github 저장소를 완전히 참고하여 진행했으며, 여기서 자세히 설명하지 않겠습니다.
README에 따라 planet 서버를 구축한 후에는 네트워크에 가입한 모든 기기 간에 상호 접근이 가능해집니다. 하지만 머리말에서 언급했듯이 연구실 서버는 직접 연결할 수 없으므로 다른 머신을 통해 트래픽을 전달해야 합니다.
zerotier 트래픽 전달
마침 교내에 개인적으로 사용하는 서버(이하 전달 서버)가 있어서 제 홈페이지 등 서비스가 모두 그 위에서 실행되고 있습니다. 이 서버를 가상 LAN에 가입시키고, 연구실 서버로의 연결 트래픽을 전달하도록 하면 됩니다.
전달 서버의 교내 IP가 172.26.1.2이고 가상 LAN IP가 10.11.1.2이며, 연구실 서버들의 교내 IP는 114.212.1.101부터 114.212.1.105까지라고 가정합니다.
먼저 위에서 설정한 zerotier planet 관리자 페이지에 접속하여 전달 서버의 Active bridge를 체크해야 트래픽 전달이 허용됩니다.
전달 서버 설정
먼저 전달 기능을 활성화해야 합니다. /etc/sysctl.conf 파일에서 net.ipv4.ip_forward를 1로 수정하고, 해당 줄이 없으면 추가한 후 다음 명령을 실행합니다.
sudo sysctl -p # 转发配置立即生效
# 配置转发
PHY_IFACE=enp5s0 # 根据网卡自行修改
ZT_IFACE=ztlowm7c2d # 根据网卡自行修改
iptables -t nat -A POSTROUTING -o $PHY_IFACE -j MASQUERADE
iptables -A FORWARD -i $PHY_IFACE -o $ZT_IFACE -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i $ZT_IFACE -o $PHY_IFACE -j ACCEPT
위 iptables 규칙은 재부팅 후 사라지므로, 영구 설정 방법을 직접 검색해보시기 바랍니다.
클라이언트 설정
zerotier planet 관리자 페이지에서 routes를 설정하여 Target=114.212.0.0/16, Gateway=10.11.1.2를 입력하면 클라이언트가 관련 라우팅 테이블을 다운로드하여 연구실 서버로 향하는 트래픽을 전달 서버로 보내도록 할 수 있습니다.
하지만 114.212.0.0/16은 공인 IP 대역이므로 zerotier가 이 라우트를 배포하지 않습니다. (다른 사설 IP 대역, 예를 들어 172.26.0.0/16은 가능합니다).
사용자가 클라이언트에서 다음 코드를 실행하기만 하면 됩니다. 원격으로 공인 라우트를 허용합니다:
zerotier-cli set {网络ID} allowGlobal=1