Ubuntu에서 GRE 터널을 구성하는 방법을 단계별로 설명해드리겠습니다.
현재 사용 중인 환경을 고려하여 적절한 설정을 적용하시면 됩니다.
1. GRE 터널 개요
GRE(Generic Routing Encapsulation) 터널은 IP 패킷을 캡슐화하여 두 개의 네트워크를 연결하는 데 사용됩니다.
예제 네트워크:
- Host A (터널 서버)
- 공인 IP:
61.78.91.29
- 내부 IP:
10.0.0.1
- 공인 IP:
- Host B (터널 클라이언트)
- 공인 IP:
210.204.243.32
- 내부 IP:
10.0.0.2
- 공인 IP:
2. ip_gre
커널 모듈 로드
두 서버에서 GRE 터널을 사용하려면 커널 모듈을 로드해야 합니다.
sudo modprobe ip_gre
모듈이 정상적으로 로드되었는지 확인:
lsmod | grep gre
3. Host A에서 GRE 터널 설정
3.1. GRE 터널 인터페이스 생성
sudo ip tunnel add gre1 mode gre remote 210.204.243.32 local 61.78.91.29 ttl 255
gre1
: 터널 인터페이스 이름mode gre
: GRE 모드 사용remote 210.204.243.32
: 원격(Host B)의 공인 IPlocal 61.78.91.29
: 로컬(Host A)의 공인 IPttl 255
: 패킷의 TTL 설정
3.2. 터널 인터페이스 활성화 및 IP 설정
sudo ip link set gre1 up
sudo ip addr add 10.0.0.1/24 dev gre1
4. Host B에서 GRE 터널 설정
4.1. GRE 터널 인터페이스 생성
sudo ip tunnel add gre1 mode gre remote 61.78.91.29 local 210.204.243.32 ttl 255
4.2. 터널 인터페이스 활성화 및 IP 설정
sudo ip link set gre1 up
sudo ip addr add 10.0.0.2/24 dev gre1
5. 라우팅 설정
터널을 통해 통신이 가능하도록 라우팅 설정을 추가합니다.
5.1. Host A에서 설정
sudo ip route add 10.0.0.2/32 dev gre1
5.2. Host B에서 설정
sudo ip route add 10.0.0.1/32 dev gre1
6. 방화벽 (iptables) 설정
GRE 프로토콜(IP proto 47
)을 허용해야 합니다.
6.1. Host A에서 방화벽 설정
sudo iptables -A INPUT -p 47 -s 210.204.243.32 -j ACCEPT
sudo iptables -A OUTPUT -p 47 -d 210.204.243.32 -j ACCEPT
6.2. Host B에서 방화벽 설정
sudo iptables -A INPUT -p 47 -s 61.78.91.29 -j ACCEPT
sudo iptables -A OUTPUT -p 47 -d 61.78.91.29 -j ACCEPT
7. 설정 영구 적용
재부팅 후에도 터널이 유지되도록 설정을 저장해야 합니다.
7.1. sysctl
설정 (IP 포워딩 활성화)
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
7.2. 네트워크 설정 (/etc/network/interfaces
)
Host A (/etc/network/interfaces
)
auto gre1
iface gre1 inet static
address 10.0.0.1
netmask 255.255.255.0
pre-up ip tunnel add gre1 mode gre remote 210.204.243.32 local 61.78.91.29 ttl 255
post-down ip tunnel del gre1
Host B (/etc/network/interfaces
)
auto gre1
iface gre1 inet static
address 10.0.0.2
netmask 255.255.255.0
pre-up ip tunnel add gre1 mode gre remote 61.78.91.29 local 210.204.243.32 ttl 255
post-down ip tunnel del gre1
적용 후 네트워크 서비스 재시작:
sudo systemctl restart networking
8. 연결 테스트
8.1. Host A에서 Host B 핑 테스트
ping -c 4 10.0.0.2
8.2. Host B에서 Host A 핑 테스트
ping -c 4 10.0.0.1
핑이 정상적으로 되면 GRE 터널이 성공적으로 연결된 것입니다.
9. 추가 설정: NAT 사용 (선택 사항)
터널을 통해 외부로 나가는 트래픽을 NAT로 변환하려면 iptables
에 NAT 설정을 추가해야 합니다.
9.1. Host A에서 NAT 설정
sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
9.2. Host B에서 NAT 설정
sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
이제 GRE 터널을 통해 내부 IP를 외부 네트워크에서 사용할 수 있습니다.
이 설정을 적용하면 Host A와 Host B 간의 GRE 터널이 정상적으로 동작하며, 내부 네트워크(10.0.0.0/24)를 통해 서로 통신할 수 있습니다.
답글 남기기