SaevOps
[RockyLinux 8.10] OpenVPN 구축 본문
🌐 Rocky Linux에 OpenVPN 서버 구축하고 KT Cloud 망 연결하기 🌐
Rocky Linux 8.10 환경에 OpenVPN 서버를 구축하여 KT Cloud 네트워크 대역과 안전하게 통신하는 방법을 상세하게 안내합니다. 클라이언트 설정까지 포함하여, VPN을 통해 특정 네트워크 망에 접속하고 활용하는 기본적인 시나리오를 제시합니다.
실습 환경:
- 운영체제: Rocky Linux 8.10
- 할당받을 대역대 (OpenVPN 내부 네트워크): 192.168.100.0/24
- OpenVPN 서버 IP: 211.253.27.235 / 172.27.0.78
- 접속 시도 할 서버 IP (KT Cloud 내부 네트워크): 172.27.0.41
- 클라이언트 로그인 계정 (PAM 인증 사용): openvpn1 / password1!
⚙️ 1단계: OpenVPN 서버 설치
# 패키지 업데이트
sudo dnf update -y
# EPEL (Extra Packages for Enterprise Linux) 저장소 설치
sudo dnf install epel-release -y
# OpenVPN 및 easy-rsa 패키지 설치
sudo dnf -y install openvpn easy-rsa
🔑 2단계: 인증 관련 파일 생성 및 설정
OpenVPN 서버와 클라이언트 간의 안전한 통신을 위한 인증서 및 키 파일을 생성합니다.
# easy-rsa 접근 심볼릭 링크 생성
mkdir ~/easy-rsa
ln -s /usr/share/easy-rsa/* ~/easy-rsa/
# easy-rsa 폴더 소유자 및 권한 설정
sudo chown root ~/easy-rsa
chmod 700 ~/easy-rsa
# easy-rsa PKI (Public Key Infrastructure) 초기화
cd ~/easy-rsa
./easyrsa init-pki
# CA (Certificate Authority) 파일 생성 (비밀번호 없이)
./easyrsa build-ca nopass
# Common Name 입력 (일반적으로 서버 호스트명)
📜 3단계: 인증서 관련 설정
서버 및 클라이언트 인증서, Diffie-Hellman 파라미터, TLS 인증 키를 생성합니다.
# 서버 인증서 요청 생성 (비밀번호 없이)
./easyrsa gen-req server nopass
# Common Name 입력 (일반적으로 서버 호스트명)
# 서버 인증서 서명 (CA로 서명)
./easyrsa sign-req server server
# 'yes' 입력하여 server.crt 생성
# HMAC (Hash-based Message Authentication Code) 생성
./easyrsa gen-dh
# TLS 인증용 키 생성
openvpn --genkey --secret ta.key
⚙️ 4단계: OpenVPN 서버 설정
OpenVPN 서버 설정 파일 및 로그 디렉토리를 생성하고 설정 파일을 수정합니다.
# 로그 디렉토리 생성
mkdir -p /var/log/openvpn
# OpenVPN 서버 설정 및 키 파일 디렉토리 생성
mkdir -p /etc/openvpn/server
# OpenVPN 서버 설정 파일 수정
vi /etc/openvpn/server/server.conf
/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 서버 유저 로그인 방식 설정 (PAM 인증 활성화)
plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so login
verify-client-cert none
username-as-common-name
💾 5단계: 인증서 및 키 파일 복사
생성된 인증서 및 키 파일을 OpenVPN 서버 설정 디렉토리로 복사합니다.
# 인증서 및 키 파일 복사
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/
🔒 6단계: PAM (Pluggable Authentication Modules) 설정
OpenVPN 클라이언트의 사용자 이름/비밀번호 인증을 위해 PAM 설정을 수정합니다.
# PAM 설정
vi /etc/pam.d/openvpn
/etc/pam.d/openvpn 내용:
auth required pam_unix.so
account required pam_unix.so
➡️ 7단계: (선택) 포트 포워딩 설정
본 실습 환경에서는 필요하지 않지만, NAT 환경에서 OpenVPN 서버에 접근해야 하는 경우 포트 포워딩 설정을 해야 합니다.
# IP 포워딩 활성화
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p # 설정 적용
▶️ 8단계: OpenVPN 서비스 실행
OpenVPN 서버 서비스를 시작하고, 시스템 부팅 시 자동 실행되도록 등록합니다.
# OpenVPN 서비스 시작
sudo systemctl start openvpn-server@server
# OpenVPN 서비스 자동 시작 등록
sudo systemctl enable openvpn-server@server
# OpenVPN 서비스 상태 확인
sudo systemctl status openvpn-server@server
🛡️ 9단계: 방화벽 설정 및 포워딩 정책 추가
OpenVPN 통신을 위한 방화벽 규칙을 추가합니다.
# 방화벽 시작 및 자동 시작 등록
sudo systemctl start firewalld
sudo systemctl enable firewalld
# NAT 마스커레이드 활성화 (내부 네트워크에서 외부로 통신 가능하게 함)
sudo firewall-cmd --add-masquerade --permanent
# OpenVPN UDP 포트(1194) 허용
sudo firewall-cmd --zone=public --add-port=1194/udp --permanent
# OpenVPN 내부 네트워크를 trusted 영역으로 설정 (선택 사항)
sudo firewall-cmd --zone=trusted --add-source=192.168.100.0/24 --permanent
# OpenVPN 내부 네트워크에서 KT Cloud 네트워크로의 트래픽 허용 (MASQUERADE)
sudo firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -s 192.168.100.0/24 -d 172.27.0.0/16 -j MASQUERADE
# OpenVPN 터널 인터페이스를 통한 트래픽 허용 (FORWARD 규칙)
sudo 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
sudo 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
# 방화벽 설정 적용
sudo firewall-cmd --reload
💻 10단계: 클라이언트 설정
클라이언트에서 OpenVPN에 접속하기 위한 설정 파일을 생성합니다.
# 클라이언트 설정 파일 (client.ovpn) 생성 후 아래 내용 추가
vi client.ovpn
client.ovpn 내용:
client
dev tun
proto udp
# 자신의 OpenVPN 서버의 공인 IP 주소와 포트
remote 211.253.27.235 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 client.crt # 클라이언트 인증서 (새로 생성 필요)
key client.key # 클라이언트 개인 키 (새로 생성 필요)
tls-auth ta.key 1
verb 3
log-append openvpn.log
mssfix 1400
tun-mtu 1500
클라이언트 파일 생성 안내:
- 빨간색 (client.crt, client.key): 클라이언트별로 새로 생성해야 하는 파일입니다. 서버에서와 유사한 방식으로 easyrsa gen-req client1 nopass 명령으로 요청 파일을 생성하고, easyrsa sign-req client client1 명령으로 CA를 통해 서명하여 클라이언트 인증서를 만듭니다. 클라이언트 개인 키는 ~/easy-rsa/pki/private/client1.key에 생성됩니다. 이 파일들을 클라이언트에게 안전하게 전달해야 합니다.
- 노란색 (ca.crt, ta.key): 서버의 /etc/openvpn/server/ 디렉토리에서 가져오는 파일입니다.
최종 클라이언트 설정 파일 구조:
클라이언트 측에는 다음 파일들이 client.ovpn 파일과 같은 디렉토리에 위치해야 합니다.
client.ovpn
ca.crt # 서버에서 복사
client.crt # 클라이언트에서 생성 후 서버에서 복사
client.key # 클라이언트에서 생성 후 복사
ta.key # 서버에서 복사
✅ 최종 결과 확인
OpenVPN 클라이언트를 실행하여 VPN 연결이 정상적으로 수립되는지 확인합니다. 연결 후 클라이언트의 IP 주소가 192.168.100.0/24 대역으로 할당되고, OpenVPN 서버를 통해 172.27.0.41 (접속 시도 할 서버 IP)을 포함한 KT Cloud 네트워크 망과 통신이 가능한지 확인합니다.
OpenVPN을 통해 해당 네트워크 망으로 접속됨 확인
💡 해당 기능 활용법
OpenVPN을 통해 구축된 VPN 연결은 다양한 방법으로 활용될 수 있습니다. 대중적으로는 다음과 같은 용도로 사용됩니다.
- 보안 터널링: 공용 네트워크 환경에서 안전하게 사설 네트워크에 접근합니다.
- 원격 접속: 외부에서 회사 내부 서버나 리소스에 안전하게 접속합니다.
- 네트워크 확장: 지리적으로 떨어진 네트워크를 하나의 논리적인 네트워크로 연결합니다.
이 가이드를 통해 Rocky Linux에 OpenVPN 서버를 성공적으로 구축하고, KT Cloud 네트워크 망과의 안전한 통신 환경을 구성하실 수 있기를 바랍니다.
'리눅스' 카테고리의 다른 글
[리눅스] Swap Partition & Swap File (0) | 2025.05.21 |
---|---|
[리눅스] 오래된 파일 찾기/이동 (1) | 2023.10.19 |
[리눅스] rsync backup (0) | 2023.08.11 |
[리눅스] 공유폴더 설정 [nfs] (0) | 2022.11.08 |
[리눅스] Windows - linux 공유폴더 설정 [Samba] (0) | 2022.08.25 |