1) k8s cluster를 묶기 위한 openVPN 설치
k3s로 공유기에 속한 머신 4대와 oracle instance 2대를 한 클러스터로 묶어야함. 근데 k3s에선 ip로 통신하기때문에, 192.168.0.x IP로 등록됨 .. 그러면 oracle instance들은 로컬 머신들을 볼수없다..
cloud instance랑 집에있는 머신들이랑 k3s로 연결하기 쉽게 만들기 위해서 openVPN을 설치한다
- 네트워크 잘 모름
- k8s port에대해서도 정확히 모름
- ip로 통신할 수 있어야하는것같은데 집에 머신이 4대라서 port-forwarding으로 해결할수있는지 모르겠음
- k3s install command 건들고싶지 않음(복잡해보임)
OCI 서버스펙
- instance type: VM.Standard.A1.Flex(2 core, 12GB memory, 100gb storage), 두대 띄우기 위해서 free tier 절반 사이즈
- OS: Canonical-Ubuntu-22.04-aarch64-2023.10.13-0
- fault domain: 두대가 서로 다른 fault domain에 위치 (미래에 할지도 모를 HA)
용어 (접속하는 인스턴스가 많으니 헷갈리지 않기 위해 메모)
- openvpn server instance: OCI instance 두대중 openvpn server가 설치된 인스턴스
- openvpn client instance: OCI instance 두대중 openvpn client로 사용하는 인스턴스
OCI 서버 접근
ssh key를 받은다음 permission을 400으로 바꿔줘야함, 유저는 ubuntu임
chmod 400 instance.key
ssh -i instance.key ubunutu@${INSTANCE_IP}
apt 패키지들 전부 업그레이드 하고 재부팅
sudo apt update;
sudo apt upgrade;
sudo reboot
openVPN 설치
https://www.cyberciti.biz/faq/howto-setup-openvpn-server-on-ubuntu-linux-14-04-or-16-04-lts/
스크립트 다운로드 + 실행
wget https://git.io/vpn -O openvpn-install.sh;
sudo chmod +x openvpn-install.sh;
sudo bash openvpn-install.sh;
실행하면 뜨는 옵션
- UDP/TCP?: UDP
- PORT: 그냥 엔터 (default 1194)
- DNS server: Google
- Name: user (맘대로해도됨)
그리고 완료되면 /root/user.ovpn
에 client config 파일이 생성됨
Security List (Security Group)
instance에 떠있는 openvpn server를 접근하기 위해선 security group을 열어줘야한다
근데 실패해서 특정 IP로 모든 포트 열어주게 했음.. 1194 UDP만 있으면 된다고 하는데 아무튼 실패함.
- description이 openVPN인건 openVPN에서 쓴다는 모든 포트들 다 등록해보았음 (실패)
- 안돼서 아래 두개 등록해둠
- 집 IP: 공유기에 붙어있는 머신들이 접속
- instance IP: openVPN server가 띄워진 instance말고, client로 접속할 instance의 IP임
openvpn client config 추가
https://www.cyberciti.biz/faq/howto-setup-openvpn-server-on-ubuntu-linux-14-04-or-16-04-lts/
openvpn server instance 에서 실행했던 openvpn-install.sh 커맨드를 다시 실행하면,
OpenVPN is already installed.
Select an option:
1) Add a new client
2) Revoke an existing client
3) Remove OpenVPN
4) Exit
Option: # 1번 선택
Provide a name for the client:
Name: OCI-openvpn-client # client name 설정
... (설정중)
OCI-openvpn-client added. Configuration available in: /root/OCI-openvpn-client.ovpn
/root/OCI-openvpn-client.ovpn
으로 config file이 추가된다 (/root/user.ovpn
도 있음)
이제이걸 openvpn client로 쓸 서버들에 옮기면 됨
openvpn client server에 openvpn client 설치
# root user로 되어있으니 owner를 바꿔준다
OPENVPN_SERVER_INSTANCE $ sudo cp /root/OCI-openvpn-client.ovpn ~/
OPENVPN_SERVER_INSTANCE $ sudo chown ubuntu:ubuntu ~/OCI-openvpn-client.ovpn
OPENVPN_SERVER_INSTANCE $ exit;
# 로컬로 ovpn file을 옮기고, client로 다시 또 옮겨준다
local $ scp -i ssh.key ubuntu@${OPENVPN_SERVER_INSTANCE}:/home/ubuntu/OCI-openvpn-client.ovpn .
local $ scp -i ssh.key OCI-openvpn-client.ovpn ubuntu@${OPENVPN_CLIENT_INSTANCE}:/home/ubuntu/
# 파일 확인
local $ ssh -i ssh.key ubuntu@${OPENVPN_CLIENT_INSTANCE}
OPENVPN_CLIENT_INSTANCE $ ls
OCI-openvpn-client.ovpn
https://www.cyberciti.biz/faq/howto-setup-openvpn-server-on-ubuntu-linux-14-04-or-16-04-lts/
여기 문서를 다시 보면서 openvpn client를 설치
sudo apt install openvpn -y # openvpn 설치
sudo cp OCI-openvpn-client.ovpn /etc/openvpn/client.conf
테스트, 여기서 문제가있으면 한 3분내에 handshake failure 메시지가 나온다 문제없으면 끝에 Initialization Sequence Completed
이 메시지가 나옴
sudo openvpn --client --config /etc/openvpn/client.conf
실행후 확인
sudo systemctl start openvpn@client
ping 10.8.0.1 # openvpn server instance로 ping을 보낸다
sudo apt install net-tools # ifconfig 커맨드 설치
ifconfig # 여기서 10.8.0.xxx IP가 찍힘, 이게 vpn 내부 IP임
네트워크 우선순위 확인
https://snowdeer.github.io/slinux/2018/10/13/ubuntu-change-network-priority/
k8s cluster에 vpn ip를 (아무런설정없이) 등록하려면 네트워크 우선순위를 봐야한다
sudo apt install ifmetric -y
route -n
# Metric field의 숫자가 낮은게 높은 우선순위가 됨
트러블슈팅
할때 쓴것들
system app log 보기
sudo systemctl status openvpn-server@server.service
sudo journalctl -f -u openvpn-server@server.service
network 잘 열려있는지 확인
ping ${IP} 로는 뭐가 되는지 안되는지 만족스럽지않음 ㅋㅋ
미리 설치
sudo apt install -y tcpdump netcat net-tools
client에서는 어차피 잘 보내줄건데, server에서 잘 받고있는 상황인지 확인 필요. 여기서 안찍히면 security list 이슈로 판단할수 있음
- openvpn server instance: tcpdump를 아래처럼 켜두자
# network device name 'enp0s6'은 ifconfig로 대충 찍어서 확인 sudo tcpdump -ni enp0s6 udp and port 1194
- openvpn client instance: udp에 패킷을 던져보자
echo -n 'aaaabbbbccccd' | nc -u ${OPENVPN_SERVER_IP} 1194 # openvpn port가 1194
이렇게 하면 packet length 13으로 packet이 들어온게 찍히면 security list가 정상.
안찍히는거면 security list에 문제있는거임