4년전부터 대충 사용하던 openvpn의 찜찜한 부분을 공부해서 다시 정리해보았습니다. 한글 자료가 많이 부족하여 직접 작성하게 되었습니다. 연제 글로 올려봅니다.

  1. https://teamsmiley.github.io/2020/09/11/openvpn-1-tun/
  2. https://teamsmiley.github.io/2020/09/11/openvpn-2-tun-docker/
  3. https://teamsmiley.github.io/2020/09/11/openvpn-3-tap/

openvpn - tap - Ethernet Bridging

사내 vpn을 구축해서 사용해야해서 openvpn을 이용해서 구축을 해 보았다.

vpn을 구축할때는 TUN (layer 3 , nat) 방식과 TAP (layer 2 , bridge) 방식이 있다.

TUN 방식 : 일반적으로 공유기를 쓰는것과 비슷하다. 사내에서 사용하는 아이피 (예 192.168.0.xxx) 를 사용하지 않고 새로운 대역을 할당받아서 vpn이 서로 연결해주는 방식이다.

TAP 방식 : 일반적으로 사내에 switch를 하나더 연결한 것과 같고 사내에서 사용하는 아이피 (예 192.168.0.xxx)와 같은 대역의 아이피를 할당받는다.

server setup

centos 7 로 진행해보고 방화벽은 끄고 하던지 아니면 다음 세팅을 해주면 될듯 싶다.

firewalld centos 7

firewall-cmd –-add-service openvpn –-permanent
firewall-cmd –-add-masquerade –-permanent

firewall-cmd --reload
systemctl restart firewalld

# or
# systemctl stop firewalld
# systemctl disable firewalld

ip forward

vi /etc/sysctl.conf

net.ipv4.ip_forward = 1
systemctl restart network.service

vpn에서 받은걸 ip forward 를 통해서 전달해줘야한다.

server에 브릿지 인터페이스를 하나 만들어야한다

sysctl -a |grep -i net.ipv4.ip_forward # sysctl 설정값 확인 1 이 보여야한다.

yum install bridge-utils -y

cd /etc/sysconfig/network-scripts/

# enp7s0 nic포트를 브릿지로 만든다.
cp ifcfg-enp7s0 ifcfg-br0

vi /etc/sysconfig/network-scripts/ifcfg-br0

NAME="br0"
DEVICE="br0"
TYPE=Bridge
ONBOOT=yes
NETBOOT=no
UUID="82305fc6-7f15-4d8f-9c8b-09cd5b7b1892"
IPV6INIT=no
BOOTPROTO=none
IPADDR=192.168.0.121
PREFIX=24
GATEWAY=192.168.0.1

vi /etc/sysconfig/network-scripts/ifcfg-enp7s0

# Generated by dracut initrd
NAME="enp7s0"
DEVICE="enp7s0"
ONBOOT=yes
BRIDGE="br0" #추가

systemctl restart network

bridge network만든 후 ifconfig

Tap - Ethernet Bridging setup

install openvpn

yum install epel-release -y
yum update -y
yum install -y openvpn wget
yum install -y bridge-utils
  • easy-rsa 2

easy-rsa 2 가 필요하다 그런데 3도 있기는한데 대충 분위기가 2.xx를 쓰는 분위기 openvpn도 3 이 있으나 2.x 쓰는 분위기

혹시 모르니 버전번호도 체크해보기 바란다.

https://github.com/OpenVPN/easy-rsa-old/releases

cd
wget -O /tmp/easyrsa https://github.com/OpenVPN/easy-rsa-old/archive/2.3.3.tar.gz
tar xfz /tmp/easyrsa
mkdir -p /etc/openvpn/easy-rsa
cp -rf easy-rsa-old-2.3.3/easy-rsa/2.0/* /etc/openvpn/easy-rsa
ls -alF /etc/openvpn/easy-rsa

tap device만들자

openvpn --mktun --dev tap0

# 재부팅하면 이 값이 사라짐. 그래서 재부팅후에는 다시 커맨드 실행해줘야함.
brctl addif br0 tap0
ifconfig tap0 0.0.0.0 promisc up
ifconfig enp7s0 0.0.0.0 promisc up

원래 시스템은 기본적으로 자신의 것만 받도록 설정이 되있다 promisc 를 up하면 모든 트래픽을 받는다.

여기까지 하고 난후 ifconfig

tap0가 만들어진걸 알수 있다.

tap0 삭제를 원하면 이처럼

openvpn --rmtun --dev tap0

openvpn 설정

기본 설정은 앞글을 꼭 읽어보고 다 파악하고 진행해야한다.

vi /etc/openvpn/server.conf

dev tap0     # tap이라고 기본문서에 잇어서 주석만 해제해서 고생햇음 꼭 0를 붙여줘야함
; server  10.8.0.0 255.255.255.0 #더이상 nat를 안해서 필요없음
server-bridge 192.168.0.1 255.255.255.0 192.168.0.200 192.168.0.240 # 클라이언트에 200-240번 아이피를 배당하고 브릿지한다. gw는 1 이다.

systemctl start openvpn@server

클라이언트 파일도 변경

;dev tun
dev tap

연결하고 나면 ifconfig로 ip check.

192.168.0.x가 받아졋으면 성공

client-to-client하기

서버설정에서 client-to-client와 topology를 주석제거하고 사용

이제 같은 대역폭으로 아이피도 받고 client to client도 되니 같은 스위치를 공유하는듯 작업할수 있다.

재부팅후에도 동작하게 하자.

vi /etc/sysconfig/network-scripts/ifcfg-tap0

NAME="tap0"
DEVICE="tap0"
ONBOOT=yes
TYPE=Tap
BRIDGE="br0"
NM_CONTROLLED=no

vi /etc/rc.d/rc.local

ip link set enp7s0 promisc on
ip link set tap0 promisc on

이제 재부팅후에도 테스트해보자.

teamsmiley's profile image

teamsmiley

2020-09-11 00:00

Read more posts by this author