Настройка Linux для туннеля GRE
Введение
Generic Routing Encapsulation (GRE) - это протокол туннелирования, разработанный Cisco Systems, который может инкапсулировать широкий спектр протоколов сетевого уровня в виртуальных двухточечных каналах или двухточечных каналах по сети Интернет-протокола.Туннель GRE полезен в определенных ситуациях, например, для защиты сервера без защиты от DDoS с использованием другого с защитой, или для включения приложений, которые позволяют IPv4 только принимать IPv6.
Предпосылки
Прежде всего, у вас должно быть два сервера с правами доступа root. В этом руководстве они будут называться Сервер A и Сервер B и будут иметь следующие характеристики:
- Сервер A - сервер, к которому будут подключаться все клиенты
- IP: 198.51.100.1
- Внутренний IP-адрес туннеля GRE: 10.0.0.1
- Сервер B - сервер, на котором фактически запущены все приложения
- IP: 203.0.113.1
- Внутренний IP-адрес туннеля GRE: 10.0.0.2
Шаг 1 - Загрузить модуль
Для настройки туннеля GRE в Linux у вас должен бытьip_gre
загружен модуль в вашем ядре. Чтобы убедиться, что он загружен, просто сделайте:sudo modprobe ip_gre
lsmod | grep gre
ip_gre ##### 0
gre ##### 1 ip_gre
Для пересылки всего трафика в туннель GRE и из него мы будем использовать iptables и iproute2, которые уже должны быть установлены во всех основных дистрибутивах Linux. Если они не установлены, используйте следующую команду
для дистрибутивов на основе Debian:
sudo apt install iptables iproute2
sudo yum install iptables iproute2
Шаг 2 - Настройка туннеля
Сначала мы должны настроить наш туннель.На сервере A выполните этот код, чтобы включить пересылку ip:
sudo echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sudo sysctl -p
sudo ip tunnel add gre1 mode gre local 198.51.100.1 remote 203.0.113.1 ttl 255
sudo ip addr add 10.0.0.1/30 dev gre1
sudo ip link set gre1 up
sudo ip tunnel add gre1 mode gre local 203.0.113.1 remote 198.51.100.1 ttl 255
sudo ip addr add 10.0.0.2/30 dev gre1
sudo ip link set gre1 up
Шаг 2.1 - Тест Ping
На сервере А делайте:ping 10.0.0.2
ping 10.0.0.1
Шаг 3 - Добавить новые маршруты
Маршрут необходим для правильной обработки данных, поступающих через туннель GRE.На сервере B выполните:
sudo echo '100 GRE' >> /etc/iproute2/rt_tables
sudo ip rule add from 10.0.0.0/30 table GRE
sudo ip route add default via 10.0.0.1 table GRE
Шаг 4 - Настройте NAT
NAT используется для передачи данных через нашу GRE и на другой конец.На сервере А запустить:
iptables -t nat -A POSTROUTING -s 10.0.0.0/30 ! -o gre+ -j SNAT --to-source 198.51.100.1
для дистрибутивов на основе Debian:
sudo apt install curl
sudo yum install curl
curl http://www.cpanel.net/showip.cgi --interface 10.0.0.2
Шаг 5 - Порты пересылки
На сервере A выполните следующие команды, чтобы разрешить все данные, поступающие на сервер B и поступающие с него:sudo iptables -A FORWARD -d 10.0.0.2 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A FORWARD -s 10.0.0.2 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Выполнить на сервере A:
sudo iptables -t nat -A PREROUTING -d 198.51.100.1 -p PROTO -m PROTO --dport PORT -j DNAT --to-destination 10.0.0.2
Например, чтобы переслать все данные на веб-сервер (порт TCP 80), нам нужно выполнить:
sudo iptables -t nat -A PREROUTING -d 198.51.100.1 -p TCP -m TCP --dport 80 -j DNAT --to-destination 10.0.0.2
Шаг 6 - Сделай постоянным
На сервере перезагрузите все, что мы сделали, будут уничтожены. Чтобы убедиться, что туннель GRE и все остальное будет работать после перезапуска, мы должны отредактировать файл/etc/rc.local
и добавить все команды, которые мы сделали (кроме эхо!) Перед exit 0
.Заключение
Теперь, если мы подключаемся к серверу A, используя настроенные порты (например, порт TCP 80), мы вместо этого собираемся подключиться к серверу B, не зная об этом.Примечание: если вы используете CSF для управления iptables, вам, возможно, придется поместить все команды iptables в свой
/etc/csf/csfpost.sh
и вставить IP-адрес обоих серверов (также GRE) в свой /etc/csf/csf.allow
Комментариев 0