4년전부터 대충 사용하던 openvpn의 찜찜한 부분을 공부해서 다시 정리해보았습니다. 한글 자료가 많이 부족하여 직접 작성하게 되었습니다. 연제 글로 올려봅니다.
- https://teamsmiley.github.io/2020/09/11/openvpn-1-tun/
- https://teamsmiley.github.io/2020/09/11/openvpn-2-tun-docker/
- 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
이제 재부팅후에도 테스트해보자.