Wireguard 를 통한 aws EC2, Lightsail 연결 (라우팅 에러)

Wireguard 를 통한 aws EC2, Lightsail 연결 (라우팅 에러)

이번에 모니터링 서버를 구축하며 번거로움+꺼림직한 부분이 여러부분 있었다.

가장 큰 부분을 차지하는것은 포트를 개방하는 부분

로컬 서버같은 경우 포트포워딩 기반으로 적당히 내부에서만 접근 할 수 있게 제한해 주는것으로 관리를 했었다.

이번 AWS서비스를 사용해보며 인바운드 규칙을 통해 이와같은 작업을 진행하는데 이때 특정ip만 인바운드를 통과하도록 설정하는것을 고려해 보았지만

통신사에 따로 문의를 넣지 않는이상 공인 ip를 고정할 수 없어

WireGuard를 통해 접근하는 방식을 선택할 생각이였고

이를통해 80/443 포트 이외에 포트를 막아두는 방식으로 구성할 계획이였다.

WireGuard 클라이언트 설정
설치 apt install wireguard resolvconf 오류 시 apt install resolvconf sudo nano /etc/resolv.conf 아래 내용 추가 nameserver 8.8.8.8 nameserver 8.8.4.4 설정 /etc/wireguard/{이름}.conf [Interface] PrivateKey = 123123 Address = 10.8.0.7/24 DNS = 1.1.1.1 MTU = 1420 [Peer]

이전에 따로 클라이언트 설정방식을 기록해 두었기에 크게 문제 될 건 없다고 생각했지만 처음보는 현상이 나타났다.

wg-quick up {이름}

입력후 문제가 발생했다.


현상 1

기존 aws에서 할당한 공인 Ip로의 접속(연결)에 오류가 생겼다.

  • ssh /웹 콘솔 접속 에러
  • grafana 등

현상 2

wg-quick up {이름} 을 통해 할당받은? private ip 로는 접속이 가능하였다.

현상 3

ec2/lightsail 서버 내부에서 curl 을 통해 테스트 해본결과 외부와의 통신은 정상적으로 이루어졌다.


해결방법

sudo ip rule add from 172.26.8.131 table 100
sudo ip route add default via 172.26.0.1 dev ens5 table 100

172.26.8.131 = aws에서 할당한 private ip

172.26.0.1 = 게이트웨이


해결방법에 대해

WireGuard 활성화(wg-quick up) 시 기본적으로 모든 트래픽이 WireGuard 터널을 통해 라우팅되도록 설정된다

=> AWS에서 할당된 공인 IP로 들어오는 트래픽이 WireGuard 터널로 우선적으로 라우팅되어, AWS Public IP를 통한 접근이 차단되는 문제 발생

sudo ip rule add from 172.26.8.131 table 100

172.26.8.131 에서 발생하는 트래픽을 라우팅 테이블 100 으로 처리하겠다.

sudo ip route add default via 172.26.0.1 dev ens5 table 100

라우팅 테이블 100에 대해 게이트웨이를 172.26.0.1 로 설정하고 네트워크 인터페이스 ens5를 사용하도록 설정한다.

++

아마 WireGuard 활성화되면서 기존 172.26.8.131 트래픽이 이번에 추가된 10.8.0.1 게이트웨이로 연결되는게 문제인듯 하며 172.26.0.1 로 설정을 변경하는 방식인듯 하다.


++ 재부팅 후 변경사항 유지 관련

sudo netfilter-persistent save

으로 처리하려했으나

WireGuard 활성화 시 계속해서 재설정 필요

=> WireGuard .conf 수정


[Interface]
...
PostUp = ip rule add from 172.26.8.131 table 100; ip route add default via 172.26.0.1 dev ens5 table 100
PostDown = ip rule del from 172.26.8.131 table 100; ip route del default via 172.26.0.1 dev ens5 table 100


[Peer]
...

10.8.0.x 트래픽만 Wirguard 를 타게 하고싶은데

기존 (Wirguard 에 이런옵션이..)

[Peer]
...
AllowedIPs = 0.0.0.0/0, 10.8.0.0/24
...

수정

[Peer]
...
AllowedIPs = 10.8.0.0/24
...

외부에서 접속 Good, But. 왜 또 curl 이 안먹냐

해서 계속 헤메던 중 Wirguard 인터페이스의 DNS 부분을 해제(주석처리) 하니 문제가 해결되었다 (왜 인지는 잘 모르겠..)

ping으로 테스트를 진행했을 때 1.1.1.1 or 8.8.8.8 로 정상적으로 통신되는거는 확인했는데..

이부분은 미래의 나에게 미루는걸로..

최종 세팅

[Interface]
PrivateKey = {}
Address = 10.8.0.7/24
#DNS = 1.1.1.1
MTU = 1420

[Peer]
PublicKey = {}
PresharedKey = {}
AllowedIPs = 10.8.0.0/24
PersistentKeepalive = 5
Endpoint = {}

해당 설정을 통해 10.8.0.x에 대한 트래픽만 해당 Wirguard인터페이스를 통해 통신하고 나머지 트래픽은 기존 인터페이스로 통신하도록 구성할 수 있었다.

(+ 기존 aws 공인 Ip , Wirguard Ip 등 연결 가능)

다만 (DNS 주석 상태 에서) AllowedIPs 에 0.0.0.0/0 을 다시 추가하니 aws 공인 Ip 연결 x, 트래픽 제어 x (이건 당연하다 치고) 안되는걸 확인할 수 있었고

PostUp = ip rule add from 172.26.6.214 table 100; ip route add default via 172.26.0.1 dev ens5 table 100
PostDown = ip rule del from 172.26.6.214 table 100; ip route del default via 172.26.0.1 dev ens5 table 100

이 부분을 통해 aws 공인 Ip 를 통한 통신을 다시 정상화 시킬 수 있었다.

이 상태에서 다시 DNS옵션을 활성화 시키고 0.0.0.0/0 를 제거하면 또 외부와 통신을 못하는 문제 발생

이런 흐름으로 보았을 때 DNS관련, 라우팅 규칙 관련으로 해당 문제가 발생한걸로 보이는데.. 더 이상은 잘.. 모르겠다..

뭔가 aws 쪽 전용 DNS관련 제한이 있는건가..?

일단 당분간 최종세팅 기준으로 사용해보는걸로..