Friday, March 21, 2025

Cấu hình GRE Tunnel trên Linux

-

1. Tổng quan.

GRE (Generic Routing Encapsulation) là một giao thức đóng gói (encapsulation) được sử dụng để tạo các tunnel (tunnel) giữa hai thiết bị mạng. GRE tunnel giúp kết nối hai mạng từ xa như thể chúng nằm trên cùng một mạng nội bộ.

Trong bài viết này, chúng ta sẽ thiết lập một GRE tunnel giữa hai server Linux chạy Ubuntu 22.04 LTS.

2. GRE Tunnel là gì?

GRE (Generic Routing Encapsulation) là một giao thức do Cisco phát triển, cho phép đóng gói một gói tin mạng vào bên trong một gói tin khác. Điều này giúp tạo một liên kết ảo giữa hai thiết bị mạng, làm cho chúng có thể giao tiếp trực tiếp với nhau như thể đang kết nối qua mạng nội bộ.

3. GRE Tunnel có được mã hóa không?

GRE tunnel không cung cấp cơ chế mã hóa. Dữ liệu truyền qua GRE tunnel chỉ được đóng gói bên trong một header GRE mà không có bảo mật. Nếu muốn mã hóa dữ liệu, bạn cần thiết lập thêm IPSec để đảm bảo tính bảo mật.

4. Thiết lập và cấu hình GRE Tunnel trên Linux

Để thiết lập GRE tunnel, chúng ta sẽ cần làm việc trên cả hai server. Chúng ta sẽ gọi hai server này là Host AHost B.

4.1. Cấu hình GRE tunnel trên Host A

Bước 1: Kích hoạt IP Forwarding.

Trước tiên, chúng ta cần bật tính năng chuyển tiếp IP (IP forwarding) để GRE tunnel có thể hoạt động:

sysctl -w net.ipv4.ip_forward=1

Nếu muốn duy trì cấu hình này sau khi khởi động lại server, hãy chỉnh sửa file /etc/sysctl.conf và thêm dòng sau:

net.ipv4.ip_forward=1

Bước 2: Tạo interface GRE tunnel

Chạy lệnh sau để tạo interface GRE tunnel giữa Host A và Host B:

ip tunnel add gre1 mode gre remote <HOST_B_IP> local <HOST_A_IP> ttl 25

Thay <HOST_B_IP> bằng public IP address của Host B và <HOST_A_IP> bằng public IP address của Host A.

Tiếp theo, gán địa chỉ Private IP cho interface GRE trên Host A:

ip addr add 10.0.0.1/30 dev gre1

Kích hoạt interface GRE:

ip link set dev gre1 up

Bước 3: Cấu hình NAT trên firewall

Để chuyển đổi địa chỉ Source IP của các gói tin đi qua tunnel, thêm rule NAT:

iptables -t nat -A POSTROUTING -s 10.0.0.2 ! -o gre+ -j SNAT --to-source <HOST_A_IP>

Ví dụ:

iptables -t nat -A POSTROUTING -s 10.0.0.2 ! -o gre+ -j SNAT --to-source 1.1.1.1

Bước 4: Cấu hình routing table

Tạo routing table tùy chỉnh cho GRE tunnel:

echo '100 GRE' >> /etc/iproute2/rt_tables

Thêm routing rule:

ip rule add from 10.0.0.1/32 table GRE
ip route add default via 10.0.0.2 table GRE

4.2. Cấu hình GRE tunnel trên Host B

Cấu hình trên Host B tương tự như trên Host A, chỉ khác ở địa chỉ IP.

Bước 1: Kích hoạt IP Forwarding

sysctl -w net.ipv4.ip_forward=1

Bước 2: Tạo interface GRE tunnel

ip tunnel add gre1 mode gre remote <HOST_A_IP> local <HOST_B_IP> ttl 25

Thay <HOST_A_IP><HOST_B_IP> bằng IP tương ứng của Host A và Host B.

Gán địa chỉ Private IP cho Host B:

ip addr add 10.0.0.2/30 dev gre1

Kích hoạt interface GRE:

ip link set dev gre1 up

Bước 3: Cấu hình NAT trên firewall

iptables -t nat -A POSTROUTING -s 10.0.0.1 ! -o gre+ -j SNAT --to-source <HOST_B_IP>

Ví dụ:

iptables -t nat -A POSTROUTING -s 10.0.0.1 ! -o gre+ -j SNAT --to-source 2.2.2.2

Bước 4: Cấu hình routing table

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

5. Kiểm tra kết nối GRE tunnel

Sau khi hoàn tất thiết lập, bạn có thể kiểm tra xem GRE tunnel đã hoạt động hay chưa bằng cách chạy lệnh ping từ Host A đến Host B và ngược lại:

ping -c 4 10.0.0.2

Hoặc từ Host B ping đến Host A:

ping -c 4 10.0.0.1

Nếu nhận được phản hồi, có nghĩa là GRE tunnel đã được thiết lập thành công.

6. Tham khảo script cấu hình nhanh GRE.

# Description: GRE Tunnel
## GRE Tunnel Variables
HOST_A_IP=10.237.7.71
HOST_B_IP=10.237.7.73
HOST_A_PRIV_IP_GRE=172.17.250.2
HOST_B_PRIV_IP_GRE=172.17.250.1

## Site A
### Enabling IP forwarding
sysctl -w net.ipv4.ip_forward=1

### Creating the GRE tunnel interface
ip tunnel add gre1 mode gre remote ${HOST_B_IP} local ${HOST_A_IP} ttl 25

### Next, we need to assign an IP address to the GRE interface on our host:
ip addr add ${HOST_A_PRIV_IP_GRE}/30 dev gre1

### Now it's a simple matter of activating the GRE interface with the following command:
ip link set dev gre1 up

### Setting up a firewall rule for source NAT
iptables -t nat -A POSTROUTING -s ${HOST_B_PRIV_IP_GRE} ! -o gre+ -j SNAT --to-source ${HOST_A_IP}

### Creating routing table rules for the GRE tunnel interface
echo '100 GRE' >> /etc/iproute2/rt_tables
ip rule add from ${HOST_A_PRIV_IP_GRE}/32 table GRE
ip route add default via ${HOST_B_PRIV_IP_GRE} table GRE

## Site B
### Enabling IP forwarding
sysctl -w net.ipv4.ip_forward=1

### Now we can create the GRE tunnel interface from Host A to Host B:
ip tunnel add gre1 mode gre remote ${HOST_A_IP} local ${HOST_B_IP} ttl 25

### Next, we need to assign an IP address to the GRE interface on our host:
ip addr add ${HOST_B_PRIV_IP_GRE}/30 dev gre1

### Now it's a simple matter of activating the GRE interface with the following command:
ip link set dev gre1 up

### Setting up a firewall rule for source NAT
iptables -t nat -A POSTROUTING -s ${HOST_B_PRIV_IP_GRE} ! -o gre+ -j SNAT --to-source ${HOST_B_IP}

### Creating routing table rules for the GRE tunnel interface
echo '100 GRE' >> /etc/iproute2/rt_tables
ip rule add from ${HOST_B_PRIV_IP_GRE}/32 table GRE
ip route add default via ${HOST_A_PRIV_IP_GRE} table GRE

7. Lưu ý quan trọng

  • GRE không có mã hóa, nếu bạn muốn đảm bảo an toàn cho dữ liệu truyền qua GRE tunnel, hãy kết hợp với IPSec để bảo vệ dữ liệu.
  • Nếu muốn các rule NAT và routing table tồn tại sau khi khởi động lại, bạn nên lưu chúng vào các file config hệ thống hoặc sử dụng iptables-save.
  • Kiểm tra firewall (ufw, firewalld) để đảm bảo các gói tin GRE không bị chặn.

5. Kết luận

Bài viết này đã hướng dẫn bạn cách thiết lập và cấu hình GRE tunnel trên Linux một cách chi tiết. GRE tunnel giúp kết nối hai hệ thống mạng từ xa, tạo điều kiện thuận lợi cho việc truyền dữ liệu và giao tiếp giữa các server.

Tham khảo https://bitlaunch.io/blog/what-is-a-gre-tunnel-and-how-to-set-one-up/

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories