Skip to main content
  1. Posts/

Setup and Configure GRE Tunnel on Linux

3 mins
linux linux
Table of Contents

GRE (Generic Routing Encapsulation) merupakan protokol tunnel yang dikembangkan oleh Cisco Systems untuk encapsulate berbagai macam network layer di dalam virtual point-to-point links atau point-to-multipoint links melalui jaringan internet.

GRE tunnel berguna dalam situasi tertentu, seperti memberikan perlindungan server dari serangan DDOS menggunakan server yang support DDOS Protection.

Prerequisites
#

Sebelum memulai, setidaknya Anda harus memiliki dua server dengan akses root. Pada panduan ini akan menggunakan Server A dan Server B dengan pengalamatan seperti berikut.

Server A - server tempat semua klient akan terhubung.

  • IP: 192.168.160.35
  • GRE tunnel internal IP: 10.0.0.1

Server B - server yang menjalankan aplikasi.

  • IP: 192.168.160.36
  • GRE tunnel internal IP: 10.0.0.2

Module loading
#

Untuk setting GRE tunnel di linux, Anda perlu memastikan modul ip_gre sudah dimuat di kernel. Eksekusi perintah berikut pada Server A dan Server B.

modprobe ip_gre
lsmod | grep -i gre

Apabila kernel server support GRE maka akan menampilkan output seperti berikut.

# lsmod | grep -i gre
ip_gre                 32768  0
ip_tunnel              28672  1 ip_gre
gre                    16384  1 ip_gre

Agar modul aktif setelah server reboot.

echo ip_gre > /etc/modules-load.d/ip_gre.conf

Untuk meneruskan lalu lintas masuk dan keluar melalui GRE tunnel akan membutuhkan iptables dan iproute yang seharusnya sudah terinstall di linux.

Jika belum diinstall, gunakan perintah berikut.

yum -y install iproute iptables

Setup GRE tunnels
#

Aktfikan ip forwarding pada Server A

echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/ip_forwarding.conf
sysctl -p /etc/sysctl.d/ip_forwarding.conf

Selanjutnya buat interface baru menggunakan GRE tunnel.

ip tunnel add gre1 local 192.168.160.35 remote 192.168.160.36 ttl 255
ip addr add 10.0.0.1/30 dev gre1
ip link set gre1 up

Eksekusi perintah yang sama di Server B dengan menyesuaikan IP.

ip tunnel add gre1 local 192.168.160.36 remote 192.168.160.35 ttl 255
ip addr add 10.0.0.2/30 dev gre1
ip link set gre1 up

Ping test
#

Lakukan test ping untuk memastikan GRE tunnel berhasil terhubung.

Server A

ping 10.0.0.1

Server B

ping 10.0.0.2

New routes implementation
#

Setting route untuk memastikan data yang masuk melalui GRE tunnel dapat ditangani dengan benar.

Eksekusi perintah berikut di Server B

echo '100 GRE' >> /etc/iproute2/rt_tables
ip rule add from 10.0.0.0/30 table GRE
ip route add default via 10.0.0.1 table GRE

NAT configuration
#

NAT digunakan untuk meneruskan trafik melalui GRE tunnel.

Pada Server A eksekusi

iptables -t nat -A POSTROUTING -s 10.0.0.0/30 ! -o gre+ -j SNAT --to-source 192.168.160.35

Lakukan test koneksi keluar pada Server B.

Test pertama dengan perintah curl

curl http://www.cpanel.net/showip.cgi --interface 10.0.0.2

Jika yang tampil IP public server A berarti GRE tunnel sudah berfungsi.

Test kedua dengan perintah ping

# ping -c5 8.8.8.8 -I gre1
PING 8.8.8.8 (8.8.8.8) from 10.0.0.2 gre1: 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=112 time=26.0 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=112 time=26.7 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=112 time=25.9 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=112 time=26.1 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=112 time=25.9 ms

Port forwarding
#

Di Server A jalankan perintah berikut untuk mengizinkan semua trafik masuk dan keluar dari Server B.

iptables -A FORWARD -d 10.0.0.2 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -s 10.0.0.2 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Sebagai contoh, untuk forward semua trafik ke Webserver (Port TCP 80) yang ada di Server B. Maka tambahkan aturan firewall NAT berikut di Server A

iptables -t nat -A PREROUTING -d 192.168.160.35 -p TCP -m TCP --dport 80 -j DNAT --to-destination 10.0.0.2

Install nginx di Server B

yum -y install nginx

Kemudian test akses IP Server A melalui browser Anda.

Related

How to Configure cGroups v2 on Linux
2 mins
linux linux
How to Disable User Crontab in Linux
1 min
linux linux
Cara Mengaktifkan Jumbo Frame
2 mins
linux linux ubuntu windows
Using Tuned in Linux
2 mins
linux linux
Using Google Dork Tool on Linux
2 mins
linux linux
Membuat RAID Array dengan mdadm
6 mins
linux linux ubuntu