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 Block IP Addresses with Blackhole Route
·2 mins
linux linux
Suspend and Resume Processes in Linux
·1 min
linux linux
Optimizing Linux System with ZRAM
·1 min
linux linux
Disable Ping for Non-Root Users
·1 min
linux linux
Fix Error 'screen-256color: unknown terminal type'
·1 min
linux linux
Enable Google PageSpeed Module
·2 mins
linux linux apache nginx