SoftEther VPN 서버 구축 (4) – TAP Device를 통한 Local Bridge 설정

SoftEther VPN SecureNAT

SoftEther VPN에 있는 SecureNAT은 Virtual DHCP 서버와 Virtual NAT을 구현한 SoftEther의 소프트웨어이다. 커널을 건들지 않아서 정말 어떠한 권한이나 시스템 설정 없이 바로바로 VPN을 구현시켜주는 가상 인터페이스이다.

참고 : https://blog.lincoln.hk/blog/2013/05/17/softether-on-vps-using-local-bridge/

문제점

  • 느리다.
  • 서버에 ICMP PING이 중복으로 처리되서 DUP 문제가 생긴다.
  • 호스트서버와 연결을 할 수 없다.

서버에 존재하지 않은 가상의 인터페이스이므로 호스트서버와 연결을 할 수 없다.

서버 아이피가 168.126.63.1 이고, 192.168.1.0/24 에 클라이언트가 있다고 쳐보자.
SecureNAT을 이용하는 클라이언트는 가상 DHCP 서버에게서 게이트웨이로 192.168.30.1의 주소를 받고, 192.168.30.101 의 아이피를 받았다.
그러나 게이트웨이 주소인 192.168.30.1은 서버에 없는 가상의 인터페이스이다.
서버와 통신까지 하고 싶다면, 서버가 그 SecureNAT VPN Client를 실행시켜 VPN에 접속해 아이피를 부여받는 방법 뿐이다.

 

해답은 SecureNAT 대신 Local Bridge을 이용

방법은 SecureNAT 대신 Local Bridge을 사용하는 것이다.
Local Bridge는 TAP어댑터를 이용해 구성을 할 것이다. OpenVZ 컨테이너에서는 커널을 변경할 수 없다. 그러나 대부분 TUN/TAP 어댑터를 지원하기 떄문에 이 방법으로 이용할 수 있다.

 

Disable SecureNAT

SecureNAT과 로컬브릿지 모드가 함께 작동하면, 트래픽이 무한루프에 빠져 CPU가 100%에 달하게 된다. 그래서 비활성화 해야한다.

Disable SoftEther VPN SecureNAT허브 관리메뉴에

SecureNAT 클릭.

Disable SecureNAT 클릭.

SecureNAT 비활성화 완료.

 

Local Bridge 설정

SoftEther VPN Local Bridge

Local Bridge Setting 클릭

SoftEther VPN Local Bridge기존의 Virtual Hub를 선택후,
New Tap Device 에 탭 디바이스이름을 넣고 로컬 브릿지 생성을 한다.
탭 디바이스는 어댑터에 머릿말로 tap_ 이 붙기 때문에 tap 이라는 이름은 삼가하자 ㅎㅎ

tap 디바이스가 생성되었는지 SSH 에서 확인한다.

DHCP 서버 설치

SecureNAT은 Virtual DHCP 서버가 포함돼 있었는데, 로컬 브리지로 설정하면 DHCP 서버도 구현해줘야한다. dnsmasq 소프트웨어로 DHCP서버를 구축하겠다.

설정할 NAT 주소 정보
네트워크 아이디 10.255.255.0
서브넷마스크 255.255.255.0 (/24)
게이트웨이 10.255.255.254
DHCP 할당 범위 10.255.255.100 – 10.255.255.250

dnsmasq 설치

RHEL 6, 7

yum install dnsmasq

Debian 9
apt install dnsmasq

dnsmasq 설정

/etc/dnsmasq.conf 를 에디터로 열어서 보기좋게

맨위에 있는 이 주석 라인 밑에 DHCP 설정값을 입력해야지.

를 입력해준다.

port=0 은 dnsmasq 가 기본적으로 DNS서버를 구현하는데 필요없어서 비활성화하였다.
필요한 경우 dns-server 옵션을 제거 후 기본 포트인 53으로 설정해서 쓰면 된다.

dnsmasq 재시작

systemctl restart dnsmasq

 

daemon 스크립트 변경

생성한 TAP 인터페이스에 아이피를 할당해야한다.
SoftEther VPN 서버가 실행될 때마다 자동으로 할당해주기 위해
/etc/init.d/vpnserver  를 에디터로 수정한다. (RHEL 7 기준)

데비안/우분투의 경우 스크립트가 조금 다르다. 주의.
어 그런데, 데비안/우분투 계열 최신 배포판에는 ifconfig 이 없는걸로 아는데??

수정한 데몬적용 및 서버 재시작

TAP 인터페이스에 아이피주소가 할당되었는지 확인.

 

VPN 서버 연결 테스트

10.255.255. 로 정상적으로 아이피를 부여받았다.

게이트웨이 아이피에 핑도 잘 된다.

IP 포워드

바로 위 상태까지 진행했다면, 당연히 인터넷이 되질 않는다. 내부 네트워크 (tap_sevpn)에서 인터넷(eth) IP를 이용해 나갈 수 있도록 포워딩을 해야한다.

/etc/sysctl.d/1-ipv4_forward.conf 를 생성 혹은 수정한다.

아래명령을 통해 sysctl 를 적용한다.

iptables POSTROUTING rule 추가

위는 IP 주소를 지정해야한다. 일반적인 서버에 그럴 일 없지만 IP주소가 동적아이피인경우

으로 사용한다.

iptables 저장

iptables 룰은 iptables 서비스가 재시작되거나 시스템이 재부팅되면, 룰이 날라가버린다.
이를 방지하기 위해 iptables를 유지시켜주는 프로그램을 설치한다. (RHEL 7 기준)

 

기타 참고사항

iptables 를 첫 실행시 iptables의 기본 방화벽이 설정되어 DHCP 서버가 차단되는 불상사가?? 있었다. 이 경우 iptables 룰을 제거 후, 다시 설정한 뒤 save를 하자.

iptables 룰 제거 명령 (참고: https://serverfault.com/questions/200635/best-way-to-clear-all-iptables-rules)