YJWANG

Linux Host를 Private Network Gateway로 사용하기 본문

00.OS

Linux Host를 Private Network Gateway로 사용하기

왕영주 2022. 1. 21. 10:09

제가 사용해오던 가술에 대한 기록이 없어서 기록하기 위해 작성합니다.

Server VM을 bridge Network에 할당하여 직접 접속하는 방법이 있지만 일반적으로는 NAT Network에서 생성하여 사용하게 되며

Client에서 해당 VM에 접속하기 위해서는 먼저 Server에 접속 후 VM에 접속해야 하는 상황이생깁니다.

위 상황을 그림으로 나타내면 아래와 같습니다.

 

즉, Client의 eth0는 Server의 eth0 Interface와 통신이 가능하지만 Server의 virbr0 Interface와는 통신이 불가합니다. iptables와 static routing을 통해 Client의 eth0에서 Server의 virbr0과 통신할 수 있도록 구성할 수 있습니다.

구성하려는 최종 환경의 그림은 위와 같습니다.

IP정보는 아래와 같다고 가정하겠습니다.

'eth0' Network
- 10.10.90.0/24
- Client : 10.10.90.100
- Server : 10.10.90.200

'virbr0' Network
- 10.62.60.0/24
- Server : 10.62.60.1
- VM in Server : 10.62.60.100

 

먼저 Client에 Routing Table을 추가합니다.

10.10.90.200 (Server)를 통해 10.62.60.0/24 Network에 접근하려한다는 간단한 rule입니다.

$ sudo ip r add 10.62.60.0/24 via 10.10.90.200

 

이후 Server에서 FORWARDING이 될 수 있도록 설정합니다.

Kernel Parameter를 수정하여 모든 Interface에서 Packet이 forwarding될 수 있도록 지정합니다. 저는 모든 ipv4 interface에 적용했는데 특정 interface에만 적용해도됩니다.

# Kernel parameter update
$ sudo sysctl -w net.ipv4.conf.all.forwarding=1

$ sudo sysctl net.ipv4.conf.all.forwarding
net.ipv4.conf.all.forwarding = 1

 

위 과정만 거치면 iptables rule에 의해 ping 요청을 보내면 Destination Port Unreachable 응답을 받게됩니다.

(만약 iptables 를 사용하지 않아 모든 정책이 ACCEPT라면 수정할 필요 없이 잘 됩니다.)

 

이제 iptables rule을 추가합니다

$ sudo iptables -I FORWARD -i eth0 -o virbr0 -j ACCEPT

위 RULE은 eth0으로 packet이 수신되서 virbr0 으로 송신되려는 통신은 허용(ACCEPT)한다는 내용입니다.

 

설정이 완료됐습니다.

$ sudo iptables -nL FORWARD
반응형