회사/과제

OpenVPN

H E E 2022. 2. 3. 17:55
728x90

진행OS

KT Cloud 사용

 

준비물

 1. 리눅스 서버 2대 / 내 컴퓨터 (Windows)

   ㄴ 클라이언트로 연결할 리눅스 서버 1대는 HTTPD(Apache) 설치 환경이 필요 (/var/www/html/index.html)

         ㄴ index.html에 테스트 할 수 있는 내용을 추가. (ex. Test OpenVPN)

 

 2. 내 컴퓨터(Windows)에 OpenVPN, FileZila  설치

 

 3. OpenVPN 서버로 이용할 리눅스 서버는 UDP 1194 포트 오픈

 

 4. KT Cloud 서버 관리 페이지에서 리눅스 서버2 접속설정 80포트 추가 / 방화벽은 추가 X

 

 

 사설 IP

  ㄴ 리눅스 OpenVPN 서버 : 172.27.0.212

  ㄴ 리눅스 클라이언트 : 172.27.0.177

 


📌 리눅스 서버 2대 공통 설정

 

1. epel-release 설치

yum install epel-release

 

2. openvpn 설치

yum install openvpn easy-rsa

 


📌 OpenVPN 서버 설정 (리눅스 서버1 / Master 서버)

 

더보기

1. ntp 설치

yum install ntp

 

2. ntpd 설정

# 시간을 서울로 맞춤
timedatectl set-timezone Asia/Seoul

# 서버가 재부팅 해도 실행되게
systemctl enable ntpd

# ntp 실행
systemctl start ntpd

 

3. easy-rsa 설정 파일 복사

# openvpn 디렉토리 하위에 easy-rsa 디렉토리 생성
mkdir /etc/openvpn/easy-rsa

# easy-rsa 설정 파일들을 새로 만든 디렉토리에 복사
cp -r /usr/share/easy-rsa/3/* /etc/openvpn/easy-rsa

 

4. easy-rsa 설정

# 설정을 하기 위한 경로 이동
cd /etc/openvpn/easy-rsa

# pki 디렉토리 생성
./easyrsa init-pki

 

5. ca.crt 파일 생성

./easyrsa build-ca

 

6. 서버 .req 및 .key 파일 생성

./easyrsa gen-req [서버명] nopass

 

7. 서버명.crt 파일 생성
./easyrsa sign-req server [서버명]

 

8. .pem 파일 생성
./easyrsa gen-dh

 

9. ta.key 파일 생성

openvpn --genkey --secret /etc/openvpn/easy-rsa/pki/ta.key

 


📌 server.conf 설정

 

더보기
cp /usr/share/doc/openvpn-[버전]/sample/sample-config-files/server.conf /etc/openvpn/

 

2. 파일 수정

vi /etc/openvpn/server.conf

 

# 변경 후
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/[서버명].crt
key /etc/openvpn/easy-rsa/pki/private/[서버명].key

dh /etc/openvpn/easy-rsa/pki/dh.pem

 

# 변경 후
tls-auth /etc/openvpn/easy-rsa/pki/ta.key 0

 

# 변경 후
push "redirect-gateway def1 bypass-dhcp"

push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

 

# 변경 후
user nobody
group nobody

 

# 변경 후
topology subnet

 


📌 OpenVPN 실행

 

더보기
systemctl enable openvpn@server.service
systemctl start openvpn@server.service

# 정상적으로 켜졌는지 확인
systemctl status openvpn@server.service

 

2. ip addr 혹은 ifconfig로 실행 후 적용이 되었나 확인

 


📌 서버 1 - client 관련 설정 (Linux / Window 클라이언트 = 2번 진행)

 ㄴ 클라이언트 서버에서 하는거 아님! Master 서버(Linux 서버 1)에서 진행

 ㄴ 클라이언트명 부분만 바꿔서 진행하면 됩니다

 

더보기

1. /etc/openvpn/easy-rsa 경로에서 진행

cd /etc/openvpn/easy-rsa

 

2. .req 파일 및 .key 파일 생성

./easyrsa gen-req [클라이언트명]

 

3. .crt 파일 생성

./easyrsa sign-req client [클라이언트명]

 


📌 client.conf 설정

 

더보기

1. 설정을 위해 client.conf 파일을 복사

cp /usr/share/doc/openvpn-2.4.11/sample/sample-config-files/client.conf /etc/openvpn/client.conf

 

2. 파일 수정

vi /etc/openvpn/client.conf
# 변경 후
remote [외부 아이피] 1194

 

# 변경 후
# 클라이언트 서버 1 = 리눅스 서버 2
# 클라이언트 서버 2 = 내 컴퓨터(Windows)
ca ca.crt
cert [클라이언트서버1].crt
cert [클라이언트서버2].crt
key [클라이언트서버1].key
key [클라이언트서버2].key

 


📌 client 디렉토리에 파일 복사

 

더보기

1. 파일을 복사해둘 디렉토리 생성

# 한번만 진행
mkdir /etc/openvpn/client/[클라이언트명]

 

2. 생성한 디렉토리에 파일 복사

# 아래처럼 진행

cp /etc/openvpn/easy-rsa/pki/private/클라이언트명1.key /etc/openvpn/client/클라이언트명
cp /etc/openvpn/easy-rsa/pki/private/클라이언트명2.key /etc/openvpn/client/클라이언트명

cp /etc/openvpn/easy-rsa/pki/issued/클라이언트명1.crt /etc/openvpn/client/클라이언트명
cp /etc/openvpn/easy-rsa/pki/issued/클라이언트명2.crt /etc/openvpn/client/클라이언트명

cp /etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/client/클라이언트명

cp /etc/openvpn/easy-rsa/pki/ta.key /etc/openvpn/client/클라이언트명

cp /etc/openvpn/client.conf /etc/openvpn/client/클라이언트명/클라이언트명.ovpn

 


📌 Windows - FileZila를 이용하여 서버간 파일 복사

 

더보기

1. FileZila 실행 후 접속하고자 하는 서버에 접속

 ㄴ 지금은 서버 1에 접속했습니다. ㄴ 접속이 포트 22번으로 밖에 안 되기 때문에 나중에 서버 2로 접속할때는 서버 1의 22포트를 빼고, 서버 2에 22포트를 넣어줘야 합니다. (내부, 외부 포트 동일하게 22로)

 

2. windows에서 백업용 디렉토리를 열고 안에 있는 파일을 모두 복사한다.

 ㄴ 나같은 경우에 바탕화면\test\에 clientSV 디렉토리를 넣어뒀기 때문에 해당 경로로 들어갔다.

 

3. 복사한 파일을 C:\Program Files\OpenVPN\config 경로에 붙여넣는다

 

4. 윈도우 검색창에서 OpenVPN을 검색 후 아래 파일을 실행한다

 

5. 작업표시줄에 있는 화살표 버튼을 눌러 잠금 표시된 모니터를 우클릭한다

 

6. 우클릭 했을 때 뜨는 창에서 import - 파일 불러오기를 클릭

 

7. C:\Program Files\OpenVPN\config 경로에서 클라이언트명.ovpn 더블클릭

 

8. 다시 작업 표시줄에 있는 화살표를 누르고 잠금표시된 모니터를 더블클릭한다.

 

9. 아래와 같은 화면이 뜬다면 설정한 비밀번호를 입력 후 확인을 누른다

 

10. 연결에 성공했다면 5초 후에 화면 오른쪽 아래에 다음과 같은 창이 뜬다.

 


 

📌 Linux 클라이언트 - OpenVPN 연결

 

더보기

1. windows 에서 메모장을 관리자 권한으로 연다.

 

2. 파일 - 열기를 이용하여 백업용으로 남겨두었던 클라이언트명.ovpn을 연다.

 

3. 아래 내용을 수정한다.

 

4. 메모장으로 수정한 내용을 Ctrl + S를 눌러 저장하고 메모장을 종료한다. 

 

5. 리눅스 서버끼리 주고받는 방식이 아닌 FileZila를 이용하여 파일을 주고 받는다.

 ㄴ 주고받기 위하여 서버1에 할당해두었던 22포트를 해제시키고 서버2에 22포트를 다시 할당한다.

 

6. Linux 서버2 에서 Filezila로 클라이언트 파일을 넣어준 경로로 이동

cd /etc/openvpn/client/클라이언트명

 

7. openvpn --config 클라이언트명.ovpn 을 치면 아래와 같은 화면이 나온다.

vpn으로 연결하면 클라이언트 서버에서 연결이 끊기는데, 연결이 됐는지는 OpenVPN 서버를 통해 확인해볼 수 있다.

 

연결 확인은 다음 챕터에서 확인해보자.

 


📌 리눅스 서버 2와 OpenVPN 서버(리눅스 서버 1)의 연결 확인

 

- 리눅스 서버 1번 (OpenVPN 서버)에서 진행

 

더보기

1. OpenVPN에 연결된 리눅스 서버는 putty나 SecureCRT로 접속할 수 없기 때문에 OpenVPN 서버에 접속해서 명령어로 접속을 해보자.

# 클라이언트(리눅스 서버2)에 접속
ssh [클라이언트 내부 ip]

# 접속 후 클라이언트(리눅스 서버2)가 OpenVPN 서버에 제대로 연결 됐는지 확인
ip addr
# 혹은
ifconfig

 


📌 리눅스 서버끼리 내부 연결을 위한 Firewall 설정

 

- 리눅스 서버 1번 (OpenVPN 서버)에서 진행

 

더보기

1. CentOS 7버전 이상부터는 Firewall가 자동으로 꺼져있으니 시스템을 키고 아래 내용들을 입력한다.

# Firewall 실행
systemctl start firewalld
# 부팅 시에도 실행
systemctl enable firewalld

# 아래 내용을 똑같이 입력한다.
firewall-cmd --zone=public --add-service openvpn
firewall-cmd --zone=public --add-service openvpn --permanent
firewall-cmd --add-masquerade
firewall-cmd --add-masquerade --permanent
firewall-cmd --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
firewall-cmd --reload

 

2. sysctl.conf 수정

# 경로
vi /etc/sysctl.conf

# 파일 아래에 내용 추가
net.ipv4.ip_forward = 1

# 저장 후 종료
:wq

 

3. network 재실행

# 재실행
systemctl restart network.service

 


📌 OpenVPN 연결로 Windows에서 리눅스 서버2의 홈페이지 접속하기

 

- 이미 웹에 접속할 수 있는 설정은 위에서 다 마쳤다!

 

더보기

1. 웹에 접속하기 위해서 는 Windows와 리눅스 서버2가 OpenVPN 서버와 연결이 잘 되어 있어야 한다.

 

2. Windows에서 할당받은 IP가 10.0.0.2일때 리눅스 서버2 홈페이지에 접속하기 위해서는 리눅스 서버2가 할당받은 IP -> 10.0.0.3으로 접속해야 한다.

 

 

728x90
반응형