Вот что я делаю.
Сервер (общедоступный Интернет - 222.x.x.x):
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sysctl -p
iptunnel add gre1 mode gre local 222.x.x.x remote 115.x.x.x ttl 255
ip add add 192.168.168.1/30 dev gre1
ip link set gre1 up
iptables -t nat -A POSTROUTING -s 192.168.168.0/30 -j SNAT --to-source 222.x.x.x
iptables -t nat -A PREROUTING -d 222.x.x.x -j DNAT --to-destination 192.168.168.2
Клиент (общедоступный Интернет - 115.x.x.x):
iptunnel add gre1 mode gre local 115.x.x.x remote 222.x.x.x ttl 255
ip add add 192.168.168.2/30 dev gre1
ip link set gre1 up
echo '100 tunnel' >> /etc/iproute2/rt_tables
ip rule add from 192.168.168.0/30 table tunnel
ip route add default via 192.168.168.1 table tunnel
Пока здесь все идет хорошо. Но тогда 1-й вопрос, как использовать туннель GRE в качестве маршрута по умолчанию? Клиентский компьютер по-прежнему использует интерфейс 115.x.x.x по умолчанию.
2-й вопрос, как заставить проходить только ICMP-трафик через туннель, а все остальное идти через интерфейс по умолчанию? Я пытаюсь сделать это на клиентском компьютере:
ip rule add fwmark 200 table tunnel
iptables -t mangle -A OUTPUT -p udp -j MARK --set-mark 200
Но после этого у моей программы ping будет тайм-аут (если я не выполняю 2 команды выше и использую ping -I gre1 ip
вместо этого он будет работать). Позже я хочу сделать что-то еще, например, только UDP-порт 53 через туннель и т. Д.
3-й вопрос, на клиентском компьютере я заставляю одну программу mysql прослушивать интерфейс gre1 192.168.168.2. На клиентском компьютере есть еще один общедоступный интерфейс (IP 114.x.x.x) ... Как правильно пересылать трафик с помощью iptables и маршрутизировать, чтобы mysql также отвечал на запрос, исходящий из этого общедоступного интерфейса 114.x.x.x?
Вопрос 1
Проверять, выписываться использование туннеля gre в качестве маршрута по умолчанию.
вопрос 2 все icmp через туннель
iptables -t nat -A POSTROUTING -o gre1 -p icmp -j SNAT --to-source 192.168.168.2
Вопрос 3
На клиентской машине используйте DNAT для перенаправления портов с внешнего порта на порт сервера.
Метод 2 - отражение порта / зеркальное отображение порта
iptables -t nat -A PREROUTING -p tcp -m tcp -m multiport -d 114.x.x.x --dports 3306 -j DNAT --to-destination 192.168.168.1
iptables -t nat -A POSTROUTING -o gre1 -p tcp -m tcp -m multiport -d 192.168.168.1 --dports 3306 -j SNAT --to-source 192.168.168.2