리눅스

[RockyLinux 8.10] OpenVPN 구축

세브웁스 2024. 12. 29. 20:00
반응형

목표

KT클라우드 Rcoky Linux 8.10에 OpenVPN 구축 및 접속

 

💡 설치 파일 다운로드 경로(정식)
https://openvpn.net/community-downloads/

 

실습환경

운영체제 : Rocky linux 8.10
할당받을 대역대 : 192.168.100.0/24
OpenVPN 서버 IP : 211.253.27.235 / 172.27.0.78
접속시도 할 서버IP : 172.27.0.41
클라이언트 로그인 계정 : openvpn1 / password1!

 

OpenVPN 설치

# 패키지 업데이트
sudo dnf update -y

# EPEL 저장소 설치
sudo dnf install epel-release -y

# OpenVPN 패키지 설치
sudo dnf -y install openvpn easy-rsa 

 

인증 관련 파일 생성 및 설정

# rsa에 접근하기 위한 심볼릭 링크를 생성
mkdir ~/easy-rsa

ln -s /usr/share/easy-rsa/* ~/easy-rsa/

/* 

# ras 폴더 생성 및 권한 부여
sudo chown root ~/easy-rsa
chmod 700 ~/easy-rsa

# ras pki 생성 시작
cd ~/easy-rsa
./easyrsa init-pki

# ca 패스워드 없이 ca파일 생성
./easyrsa build-ca nopass 
 # 이후 Common Name 입력(보통 hostname 입력)
 
 

 

인증서 관련 설정

# 인증서 비밀번호 없이 인증서 생성

./easyrsa gen-req server nopass
# 이후 Common Name 입력(보통 hostname 입력)

# 서버 인증서 서명
./easyrsa sign-req server server
# yes를 입력해야 server.crt 생성

# hmac 생성
./easyrsa gen-dh

# TLS 인증용 키 생성
openvpn --genkey --secret ta.key

 

OpenVPN 서버 설정

# OpenVPN 서버 설정
mkdir -p /var/log/openvpn  # log를 위한 디렉토리
mkdir -p /etc/openvpn/server  # openVPN server 설정, key 파일을 위한 디렉토리

 

설정파일 수정

vi /etc/openvpn/server/server.conf
port 1194
proto udp
dev tun
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key
dh /etc/openvpn/server/dh.pem
auth SHA256
tls-auth /etc/openvpn/server/ta.key 0
topology subnet

# OpenVPN 서버가 tun0에 할당하는 대역
server 192.168.100.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

# OpenVPN 서버가 라우팅 할 클라우드 서버 subnet 대역 설정
push "route 172.27.0.0 255.255.0.0"
# 172.27.0.78
keepalive 10 120
cipher AES-256-CBC
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
verb 3

# OpenVPN 서버 유저 로그인 방식 설정
# plugin /usr/lib/x86_64-linux-gnu/openvpn/plugins/openvpn-plugin-auth-pam.so login  # pam

# CentOS의 경우 아래 경로로 지정
plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so login

verify-client-cert none
username-as-common-name

 

인증서 및 키 복사

# 인증서 및 키 복사
cd ~/easy-rsa/pki

cp ca.crt dh.pem ./private/server.key ./issued/server.crt /etc/openvpn/server/

cp ~/easy-rsa/ta.key /etc/openvpn/server/

 

PAM 설정

# PAM 설정
vi /etc/pam.d/openvpn

auth required pam_unix.so
account required pam_unix.so

 

선택) 포트포워딩 설정

# IP 포워딩 작업을 위해 설정 (현 실습에서는 사용x)

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

sysctl -p  # 설정 적용

 

OpenVPN 서비스 실행

# OpenVPN 서비스 시작 , 등록, 상태조회

systemctl start openvpn-server@server
systemctl enable openvpn-server@server
systemctl status openvpn-server@server

 

방화벽 설정 및 포워딩 정책 추가

# 방화벽 시작
systemctl start firewalld
systemctl enable firewalld

# 방화벽 룰 추가
firewall-cmd --add-masquerade --permanent
firewall-cmd --zone=public --add-port=1194/udp --permanent

# 포워딩 설정
firewall-cmd --zone=trusted --add-source=192.168.100.0/24 --permanent

firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -s 192.168.100.0/24 -d 172.27.0.0/16 -j MASQUERADE
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i tun+ -o eth0 -s 192.168.100.0/24 -d 172.27.0.0/16 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i eth0 -o tun+ -s 172.27.0.0/16 -d 192.168.100.0/24 -j ACCEPT
firewall-cmd --reload

 

클라이언트 설정

# 클라이언트 설정파일에 client.ovpn 파일 생성 후 아래 내용 추가

client
dev tun
proto udp
# 자신의 공인IP 넣기
remote **211.253.27.xxx 1194**
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
auth-user-pass
auth SHA256
cipher AES-256-CBC
key-direction 1

ca ca.crt
cert server.crt
key server.key
tls-auth ta.key 1

verb 3
log-append openvpn.log

mssfix 1400
tun-mtu 1500

 

클라이언트 파일 내용

빨간색은 신규 생성

노란색은 기존 서버에서 가져오는 파일

 

최종 결과물

 

OpenVPN을 통해 해당 네트워크 망으로 접속됨 확인

 

 

해당 기능 활용법

다양한 활용방법이 있으나, 대중적으로는  해당 VPN 사용 후 통신 가능한 다른 서버로 접속 용도로 사용

반응형