Как создать/настроить VPN, используя только SSH?

Как создать/настроить VPN, используя только SSH?

Вот проблема, которую я пытаюсь решить. Есть сервер («удаленная система»), к которому я могу подключиться по ssh с моего локального компьютера, но эта удаленная система не имеет подключения к Интернету. Я хочу предоставить удаленной системе доступ к Интернету через мой локальный компьютер с помощью VPN на основе ssh. Как мне этого добиться? Я попробовал следующее, и это, кажется, частично работает. Под «частично работает» я подразумеваю то, что пакеты соединения (пакеты синхронизации) отправляются на мой локальный компьютер, но не устанавливают соединение с Интернетом. Я использую tcpdump для захвата пакетов на локальном компьютере. Локальный компьютер и удаленная система работают под управлением Centos 7.

Установка- Примечание: команды ниже выполняются по порядку. Команды user@remote выполняются на удаленном сервере, а команды user@local выполняются на локальном компьютере.

[пользователь@удаленный ~]$ ip адрес показать
1: lo: mtu 65536 qdisc noqueue state НЕИЗВЕСТНО
    ссылка/обратная связь 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 область действия хоста lo
       действительный_lft навсегда предпочтительный_lft навсегда
    inet6 ::1/128 область действия хоста
       действительный_lft навсегда предпочтительный_lft навсегда
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
    ссылка/эфир AA:BB:CC:DD:EE:FF brd ff:ff:ff:ff:ff:ff
    inet AAA.BBB.CCC.DDD/24 brd AAA.BBB.CCC.255 область действия глобальная динамическая eth0
       действительный_lft 1785сек предпочтительный_lft 1785сек
    inet6 EEEE:FFFF:GGGG:HHHH:IIII:JJJJ:KKKK:LLLL/64 область действия глобальная noprefixroute динамический
       действительный_lft 2591987 сек предпочтительный_lft 604787 сек
    inet6 ABCD::III:JJJJ:KKKK:LLLL/64 область действия ссылка
       действительный_lft навсегда предпочтительный_lft навсегда
[пользователь@локальный ~]$ ip адрес показать
1: lo: mtu 65536 qdisc noqueue state НЕИЗВЕСТНО
    ссылка/обратная связь 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 область действия хоста lo
       действительный_lft навсегда предпочтительный_lft навсегда
    inet6 ::1/128 область действия хоста
       действительный_lft навсегда предпочтительный_lft навсегда
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
    ссылка/эфир AA:BB:CC:DD:EE:FF brd ff:ff:ff:ff:ff:ff
    inet AAA.BBB.CCC.DDD/24 brd AAA.BBB.CCC.255 область действия глобальная динамическая eth0
       действительный_lft 1785сек предпочтительный_lft 1785сек
    inet6 EEEE:FFFF:GGGG:HHHH:IIII:JJJJ:KKKK:LLLL/64 область действия глобальная noprefixroute динамический
       действительный_lft 2591987 сек предпочтительный_lft 604787 сек
    inet6 ABCD::III:JJJJ:KKKK:LLLL/64 область действия ссылка
       действительный_lft навсегда предпочтительный_lft навсегда

Создайте интерфейс tun0 наудаленныйсистема.

[пользователь@удаленный ~]$ sudo ip tuntap add tun0 режим tun
[пользователь@удаленный ~]$ ip адрес показать
1: lo: mtu 65536 qdisc noqueue state НЕИЗВЕСТНО
    ссылка/обратная связь 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 область действия хоста lo
       действительный_lft навсегда предпочтительный_lft навсегда
    inet6 ::1/128 область действия хоста
       действительный_lft навсегда предпочтительный_lft навсегда
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
    ссылка/эфир AA:BB:CC:DD:EE:FF brd ff:ff:ff:ff:ff:ff
    inet AAA.BBB.CCC.DDD/24 brd AAA.BBB.CCC.255 область действия глобальная динамическая eth0
       действительный_lft 1785сек предпочтительный_lft 1785сек
    inet6 EEEE:FFFF:GGGG:HHHH:IIII:JJJJ:KKKK:LLLL/64 область действия глобальная noprefixroute динамический
       действительный_lft 2591987 сек предпочтительный_lft 604787 сек
    inet6 ABCD::III:JJJJ:KKKK:LLLL/64 область действия ссылка
       действительный_lft навсегда предпочтительный_lft навсегда
3: tun0: mtu 1500 qdisc noop state DOWN qlen 500
    ссылка/нет

Создайте интерфейс tun0 наместныйсистема.

[пользователь@локальный ~]$ sudo ip tuntap add tun0 режим tun
[пользователь@локальный ~]$ ip адрес показать
1: lo: mtu 65536 qdisc noqueue state НЕИЗВЕСТНО
    ссылка/обратная связь 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 область действия хоста lo
       действительный_lft навсегда предпочтительный_lft навсегда
    inet6 ::1/128 область действия хоста
       действительный_lft навсегда предпочтительный_lft навсегда
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
    ссылка/эфир AA:BB:CC:DD:EE:FF brd ff:ff:ff:ff:ff:ff
    inet AAA.BBB.CCC.DDD/24 brd AAA.BBB.CCC.255 область действия глобальная динамическая eth0
       действительный_lft 1785сек предпочтительный_lft 1785сек
    inet6 EEEE:FFFF:GGGG:HHHH:IIII:JJJJ:KKKK:LLLL/64 область действия глобальная noprefixroute динамический
       действительный_lft 2591987 сек предпочтительный_lft 604787 сек
    inet6 ABCD::III:JJJJ:KKKK:LLLL/64 область действия ссылка
       действительный_lft навсегда предпочтительный_lft навсегда
3: tun0: mtu 1500 qdisc noop state DOWN qlen 500
    ссылка/нет

Назначьте IP-адрес tun0 и поднимите его:

[пользователь@локальный ~]$ sudo ip addr add 10.0.2.1/30 dev tun0
[пользователь@локальный ~]$ sudo ip link set dev tun0 up
[пользователь@локальный ~]$ ip addr show tun0
3: tun0: mtu 1500 qdisc pfifo_fast state DOWN qlen 500
    ссылка/нет
    inet 10.0.2.1/30 область действия глобальная tun0
       действительный_lft навсегда предпочтительный_lft навсегда
[пользователь@удаленный ~]$ sudo ip addr add 10.0.2.2/30 dev tun0
[пользователь@удаленный ~]$ sudo ip link set dev tun0 up
[пользователь@удаленный ~]$ ip addr show tun0
3: tun0: mtu 1500 qdisc pfifo_fast state DOWN qlen 500
    ссылка/нет
    inet 10.0.2.2/30 область действия глобальная tun0
       действительный_lft навсегда предпочтительный_lft навсегда

Измените sshd_config на удаленной и локальной системах, чтобы включить туннелирование:

[пользователь@удаленный ~]$ sudo grep PermitTunnel /etc/ssh/sshd_config
PermitTunnel точка-точка
[пользователь@локальный ~]$ sudo grep PermitTunnel /etc/ssh/sshd_config
PermitTunnel точка-точка

Создайте ssh-туннель:

[пользователь@локальный ~]$ sudo ssh -f -w0:0 root@удаленный true
Пароль root@remote:
[пользователь@локальный ~]$ ps aux | grep root@удаленный
root 1851 0.0 0.0 76112 1348 ? Ss 23:12 0:00 ssh -f -w0:0 root@remote true

Проверьте ping на обоих серверах, используя новые IP-адреса:

[пользователь@локальный ~]$ ping 10.0.2.2 -c 2
PING 10.0.2.2 (10.0.2.2) 56(84) байт данных.
64 байта из 10.0.2.2: icmp_seq=1 ttl=64 время=1,68 мс
64 байта из 10.0.2.2: icmp_seq=2 ttl=64 время=0,861 мс

--- 10.0.2.2 статистика пинга ---
2 пакета передано, 2 получено, 0% потерь пакетов, время 1002 мс
rtt мин/средн/макс/мдев = 0,861/1,274/1,688/0,415 мс
[пользователь@удаленный ~]$ ping 10.0.2.1 -c 2
PING 10.0.2.1 (10.0.2.1) 56(84) байт данных.
64 байта из 10.0.2.1: icmp_seq=1 ttl=64 время=0,589 мс
64 байта из 10.0.2.1: icmp_seq=2 ttl=64 время=0,889 мс

--- 10.0.2.1 статистика пинга ---
2 пакета передано, 2 получено, 0% потерь пакетов, время 1000 мс
rtt мин/средн/макс/мдев = 0,589/0,739/0,889/0,150 мс
[пользователь@удаленный ~]$ маршрут
Таблица маршрутизации IP ядра
Шлюз назначения Genmask Флаги Метрическая ссылка Использование Iface
шлюз по умолчанию 0.0.0.0 UG 100 0 0 eth0
10.0.2.0 0.0.0.0 255.255.255.252 U 0 0 0 tun0
AAA.BBB.CCC.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
[пользователь@удаленный ~]$ ip route show
по умолчанию через AAA.BBB.CCC.1 dev eth0 proto статическая метрика 100
10.0.2.0/30 dev tun0 proto ядро ​​область ссылка src 10.0.2.2
AAA.BBB.CCC.0/24 dev eth0 proto ядро ​​область ссылка src AAA.BBB.CCC.31 метрика 100

Получить IP-адреса Google:

[пользователь@локальный ~]$ nslookup google.com
Сервер: сервер
Адрес: сервер#53

Неавторитетный ответ:
Имя: google.com
Адрес: 173.194.219.101
Имя: google.com
Адрес: 173.194.219.100
Имя: google.com
Адрес: 173.194.219.113
Имя: google.com
Адрес: 173.194.219.102
Имя: google.com
Адрес: 173.194.219.139
Имя: google.com
Адрес: 173.194.219.138

ВАЖНЫЙ: Я запустил команду выше в другое время и получил другой результат. Не думайте, что ваш ответ будет таким же, как мой для nslookup выше.

Поскольку все IP-адреса Google начинаются с 173.194.219, давайте направим все эти IP-адреса через локальный компьютер.

[пользователь@удаленный ~]$ sudo ip route add 173.194.219.0/24 dev tun0
[пользователь@удаленный ~]$ маршрут
Таблица маршрутизации IP ядра
Шлюз назначения Genmask Флаги Метрическая ссылка Использование Iface
шлюз по умолчанию 0.0.0.0 UG 100 0 0 eth0
10.0.2.0 0.0.0.0 255.255.255.252 U 0 0 0 tun0
AAA.BBB.CCC.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
173.194.219.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
[пользователь@удаленный ~]$ ip route show
по умолчанию через AAA.BBB.CCC.1 dev eth0 proto статическая метрика 100
10.0.2.0/30 dev tun0 proto ядро ​​область ссылка src 10.0.2.2
AAA.BBB.CCC.0/24 dev eth0 proto ядро ​​область ссылка src AAA.BBB.CCC.31 метрика 100
173.194.219.0/24 dev tun0 область действия ссылка

Включить ip_forwarding:

[пользователь@локальный ~]$ grep ip_forward /etc/sysctl.conf
net.ipv4.ip_forward = 1
[user@local ~]$ sudo перезапуск сети сервиса
Перезапуск сети (через systemctl): [ OK ]

Настройте захват пакетов на локальном компьютере с помощью tcpdump:

[пользователь@локальный ~]$ sudo tcpdump -nn -vv 'порт не 22' -i любой
tcpdump: прослушивание любого, тип соединения LINUX_SLL (Linux cooking), размер захвата 65535 байт

Попробуйте подключиться к Google с удаленного сервера.

[пользователь@удаленный ~]$ openssl s_client -connect google.com:443
сокет: нет маршрута к хосту
подключиться:errno=113

Как только команда openssl запускается на удаленном сервере, tcpdump захватывает несколько пакетов:

    10.0.2.2.52768 > 173.194.219.102.443: Флаги [S], cksum 0x8702 (верно), seq 994650730, win 29200, параметры [mss 1460,sackOK,TS val 7701438 ecr 0,nop,wscale 7], длина 0
00:49:33.247753 IP (tos 0x0, ttl 64, id 46037, смещение 0, флаги [DF], proto TCP (6), длина 60)
    10.0.2.2.48774 > 173.194.219.100.443: Флаги [S], cksum 0x47a7 (верно), seq 2218733674, win 29200, параметры [mss 1460,sackOK,TS val 7701439 ecr 0,nop,wscale 7], длина 0
00:49:33.247883 IP (tos 0xc0, ttl 64, id 9538, смещение 0, флаги [нет], proto ICMP (1), длина 88)
    10.0.2.1 > 10.0.2.2: хост ICMP 173.194.219.100 недоступен - администратору запрещено, длина 68
    IP (tos 0x0, ttl 63, id 46037, смещение 0, флаги [DF], proto TCP (6), длина 60)
    10.0.2.2.48774 > 173.194.219.100.443: Флаги [S], cksum 0x47a7 (верно), seq 2218733674, win 29200, параметры [mss 1460,sackOK,TS val 7701439 ecr 0,nop,wscale 7], длина 0
00:49:33.253068 IP (tos 0x0, ttl 64, id 26282, смещение 0, флаги [DF], proto TCP (6), длина 60)
    10.0.2.2.51312 > 173.194.219.101.443: Флаги [S], cksum 0x6ff8 (верно), seq 2634016105, win 29200, параметры [mss 1460,sackOK,TS val 7701443 ecr 0,nop,wscale 7], длина 0
00:49:33.254771 IP (tos 0xc0, ttl 64, id 9539, смещение 0, флаги [нет], proto ICMP (1), длина 88)
    10.0.2.1 > 10.0.2.2: хост ICMP 173.194.219.101 недоступен - администратор запрещен, длина 68
    IP (tos 0x0, ttl 63, id 26282, смещение 0, флаги [DF], proto TCP (6), длина 60)
    10.0.2.2.51312 > 173.194.219.101.443: Флаги [S], cksum 0x6ff8 (верно), seq 2634016105, win 29200, параметры [mss 1460,sackOK,TS val 7701443 ecr 0,nop,wscale 7], длина 0
00:49:33.258805 IP (tos 0x0, ttl 64, id 9293, смещение 0, флаги [DF], proto TCP (6), длина 60)
    10.0.2.2.33686 > 173.194.219.139.443: Флаги [S], cksum 0x542b (верно), seq 995927943, win 29200, параметры [mss 1460,sackOK,TS val 7701450 ecr 0,nop,wscale 7], длина 0
00:49:33.258845 IP (tos 0xc0, ttl 64, id 9540, смещение 0, флаги [нет], proto ICMP (1), длина 88)
    10.0.2.1 > 10.0.2.2: хост ICMP 173.194.219.139 недоступен - администратору запрещено, длина 68
    IP (tos 0x0, ttl 63, id 9293, смещение 0, флаги [DF], proto TCP (6), длина 60)
    10.0.2.2.33686 > 173.194.219.139.443: Флаги [S], cksum 0x542b (верно), seq 995927943, win 29200, параметры [mss 1460,sackOK,TS val 7701450 ecr 0,nop,wscale 7], длина 0
13 пакетов захвачено
13 пакетов получено фильтром
0 пакетов отброшено ядром

Пакеты, захваченные с помощью tcpdump, предполагают, что делается попытка установить соединение (отправляются пакеты синхронизации), но ничего не получено. Также есть сообщение, 10.0.2.1 > 10.0.2.2: ICMP host 173.194.219.139 unreachable - admin prohibited, length 68которое, похоже, предполагает проблему.

Есть ли предложения, как обойти эту проблему? Есть ли правила iptable, которые нужно добавить? Есть ли проблемы с брандмауэром (firewall-d?).


Примечание №1
Вывод iptables-save:

[пользователь@локальный ~]$ sudo iptables -t nat -A POSTROUTING -s 10.0.2.2/32 ! -d 10.0.2.1/30 -j МАСКАРАД -o eth0
[пользователь@локальный ~]$ sudo iptables-save
# Сгенерировано iptables-save v1.4.21 в субботу, 15 апреля 01:40:57 2017 г.
*нат
:ПРЕДВАРИТЕЛЬНЫЙ ПЕРЕХОД ПРИНЯТ [35:8926]
:ВХОД ПРИНЯТ [1:84]
:ВЫХОД ПРИНЯТ [6:439]
:ПОСТРАСПИСАНИЕ ПРИНЯТЬ [6:439]
:OUTPUT_direct - [0:0]
:ЗОНЫ_ПОСТРАСПОЛОЖЕНИЯ - [0:0]
:POSTROUTING_ZONES_SOURCE - [0:0]
:POSTROUTING_direct - [0:0]
:POST_public - [0:0]
:POST_public_allow - [0:0]
:POST_public_deny - [0:0]
:POST_public_log - [0:0]
:ЗОНЫ_ПРЕДВАРИТЕЛЬНОГО_ВЫХОДА - [0:0]
:PREROUTING_ZONES_SOURCE - [0:0]
:PREROUTING_direct - [0:0]
:PRE_public - [0:0]
:PRE_public_allow - [0:0]
:PRE_public_deny - [0:0]
:PRE_public_log - [0:0]
-A ПРЕДВАРИТЕЛЬНАЯ ПЕРЕДАЧА -j ПРЕДВАРИТЕЛЬНАЯ ПЕРЕДАЧА_ПРЯМАЯ
-A ПРЕДВАРИТЕЛЬНАЯ_ПЕРЕДАЧА -j PREROUTING_ZONES_SOURCE
-A ПРЕДВАРИТЕЛЬНАЯ_ПЕРЕДАЧА -j ПРЕДВАРИТЕЛЬНЫЕ_ЗОНЫ_ПЕРЕДАЧИ
-A ВЫХОД -j ВЫХОД_прямой
-A POSTROUTING -j POSTROUTING_direct
-A POSTROUTING -j POSTROUTING_ZONES_SOURCE
-A POSTROUTING -j POSTROUTING_ZONES
-A POSTROUTING -s 10.0.2.2/32 ! -d 10.0.2.0/30 -j МАСКАРАД
-A ЗОНЫ_ПОСТА_ВЫБОРА -o eth0 -g POST_public
-A ЗОНЫ_ПОСТА_РАСПОЛОЖЕНИЯ -g POST_public
-A POST_public -j POST_public_log
-A POST_public -j POST_public_deny
-A POST_public -j POST_public_allow
-A ПРЕДВАРИТЕЛЬНЫЕ_ЗОНЫ_ВЫХОДА -i eth0 -g ПРЕДВАРИТЕЛЬНЫЕ_ОБЩЕСТВЕННЫЕ
-A ПРЕДВАРИТЕЛЬНЫЕ_ЗОНЫ_ВЫХОДА -g ПРЕДВАРИТЕЛЬНЫЕ_ОБЩЕСТВЕННЫЕ
-A PRE_public -j PRE_public_log
-A PRE_public -j PRE_public_deny
-A PRE_public -j PRE_public_allow
СОВЕРШИТЬ
# Завершено в субботу, 15 апреля 01:40:57 2017 г.
# Сгенерировано iptables-save v1.4.21 в субботу, 15 апреля 01:40:57 2017 г.
*калечить
:ПРЕДВАРИТЕЛЬНЫЙ ПЕРЕХОД ПРИНЯТ [169:18687]
:ВВОД ПРИНЯТ [144:11583]
:ПЕРЕДАТЬ ПРИНЯТЬ [0:0]
:ВЫХОД ПРИНЯТ [80:8149]
:ПОСТРАСПИСАНИЕ ПРИНЯТО [80:8149]
:FORWARD_direct - [0:0]
:INPUT_direct - [0:0]
:OUTPUT_direct - [0:0]
:POSTROUTING_direct - [0:0]
:ЗОНЫ_ПРЕДВАРИТЕЛЬНОГО_ВЫХОДА - [0:0]
:PREROUTING_ZONES_SOURCE - [0:0]
:PREROUTING_direct - [0:0]
:PRE_public - [0:0]
:PRE_public_allow - [0:0]
:PRE_public_deny - [0:0]
:PRE_public_log - [0:0]
-A ПРЕДВАРИТЕЛЬНАЯ ПЕРЕДАЧА -j ПРЕДВАРИТЕЛЬНАЯ ПЕРЕДАЧА_ПРЯМАЯ
-A ПРЕДВАРИТЕЛЬНАЯ_ПЕРЕДАЧА -j PREROUTING_ZONES_SOURCE
-A ПРЕДВАРИТЕЛЬНАЯ_ПЕРЕДАЧА -j ПРЕДВАРИТЕЛЬНЫЕ_ЗОНЫ_ПЕРЕДАЧИ
-A ВХОД -j ВХОД_прямой
-A ПЕРЕСЫЛКА -j ПЕРЕСЫЛКА_прямая
-A ВЫХОД -j ВЫХОД_прямой
-A POSTROUTING -j POSTROUTING_direct
-A ПРЕДВАРИТЕЛЬНЫЕ_ЗОНЫ_ВЫХОДА -i eth0 -g ПРЕДВАРИТЕЛЬНЫЕ_ОБЩЕСТВЕННЫЕ
-A ПРЕДВАРИТЕЛЬНЫЕ_ЗОНЫ_ВЫХОДА -g ПРЕДВАРИТЕЛЬНЫЕ_ОБЩЕСТВЕННЫЕ
-A PRE_public -j PRE_public_log
-A PRE_public -j PRE_public_deny
-A PRE_public -j PRE_public_allow
СОВЕРШИТЬ
# Завершено в субботу, 15 апреля 01:40:57 2017 г.
# Сгенерировано iptables-save v1.4.21 в субботу, 15 апреля 01:40:57 2017 г.
*безопасность
:ВВОД ПРИНЯТ [2197:163931]
:ПЕРЕДАТЬ ПРИНЯТЬ [0:0]
:ВЫХОД ПРИНЯТ [1229:185742]
:FORWARD_direct - [0:0]
:INPUT_direct - [0:0]
:OUTPUT_direct - [0:0]
-A ВХОД -j ВХОД_прямой
-A ПЕРЕСЫЛКА -j ПЕРЕСЫЛКА_прямая
-A ВЫХОД -j ВЫХОД_прямой
СОВЕРШИТЬ
# Завершено в субботу, 15 апреля 01:40:57 2017 г.
# Сгенерировано iptables-save v1.4.21 в субботу, 15 апреля 01:40:57 2017 г.
*сырой
:ПРЕДВАРИТЕЛЬНЫЙ ПЕРЕХОД ПРИНЯТ [2362:184437]
:ВЫХОД ПРИНЯТ [1229:185742]
:OUTPUT_direct - [0:0]
:PREROUTING_direct - [0:0]
-A ПРЕДВАРИТЕЛЬНАЯ ПЕРЕДАЧА -j ПРЕДВАРИТЕЛЬНАЯ ПЕРЕДАЧА_ПРЯМАЯ
-A ВЫХОД -j ВЫХОД_прямой
СОВЕРШИТЬ
# Завершено в субботу, 15 апреля 01:40:57 2017 г.
# Сгенерировано iptables-save v1.4.21 в субботу, 15 апреля 01:40:57 2017 г.
*фильтр
:ВВОД ПРИНЯТ [0:0]
:ПЕРЕДАТЬ ПРИНЯТЬ [0:0]
:ВЫХОД ПРИНЯТ [80:8149]
:FORWARD_IN_ZONES - [0:0]
:FORWARD_IN_ZONES_SOURCE - [0:0]
:FORWARD_OUT_ZONES - [0:0]
:FORWARD_OUT_ZONES_SOURCE - [0:0]
:FORWARD_direct - [0:0]
:FWDI_public - [0:0]
:FWDI_public_allow - [0:0]
:FWDI_public_deny - [0:0]
:FWDI_public_log - [0:0]
:FWDO_public - [0:0]
:FWDO_public_allow - [0:0]
:FWDO_public_deny - [0:0]
:FWDO_public_log - [0:0]
:ЗОНЫ_ВХОДА - [0:0]
:INPUT_ZONES_SOURCE - [0:0]
:INPUT_direct - [0:0]
:IN_public - [0:0]
:IN_public_allow - [0:0]
:IN_public_deny - [0:0]
:IN_public_log - [0:0]
:OUTPUT_direct - [0:0]
-A ВХОД -m conntrack --ctstate СВЯЗАННЫЕ,УСТАНОВЛЕННЫЕ -j ПРИНЯТЬ
-A ВХОД -i lo -j ПРИНЯТЬ
-A ВХОД -j ВХОД_прямой
-A ВХОД -j ИСТОЧНИК_ЗОН_ВХОДА
-A ВХОД -j ЗОНЫ_ВХОДА
-A ВХОД -m conntrack --ctstate НЕВЕРНЫЙ -j ОТКАЗ
-A ВХОД -j ОТКЛОНИТЬ --reject-with icmp-host-prohibited
-A ПЕРЕСЫЛКА -m conntrack --ctstate СВЯЗАННЫЕ,УСТАНОВЛЕННЫЕ -j ПРИНЯТЬ
-A ПЕРЕСЛАТЬ -i lo -j ПРИНЯТЬ
-A ПЕРЕСЫЛКА -j ПЕРЕСЫЛКА_прямая
-A ПЕРЕСЫЛКА -j ПЕРЕСЫЛКА_В_ЗОНАХ_ИСТОЧНИК
-A ВПЕРЕД -j ВПЕРЕД_В_ЗОНЫ
-A ПЕРЕСЫЛКА -j ПЕРЕСЫЛКА_ВНЕ_ЗОН_ИСТОЧНИК
-A ВПЕРЕД -j ВНЕШНИЕ_ЗОНЫ_ПЕРЕД
-A ПЕРЕСЫЛКА -m conntrack --ctstate НЕВЕРНЫЙ -j ОТБРОС
-A ПЕРЕСЫЛКА -j ОТКЛОНИТЬ --reject-with icmp-host-prohibited
-A ВЫХОД -j ВЫХОД_прямой
-A ПЕРЕНАПРАВЛЕНИЕ_В_ЗОНЫ -i eth0 -g FWDI_public
-A ПЕРЕНАПРАВИТЬ_В_ЗОНЫ -g FWDI_public
-A FORWARD_OUT_ZONES -o eth0 -g FWDO_public
-A FORWARD_OUT_ZONES -g FWDO_public
-A FWDI_public -j FWDI_public_log
-A FWDI_public -j FWDI_public_deny
-A FWDI_public -j FWDI_public_allow
-A FWDI_public -p icmp -j ПРИНЯТЬ
-A FWDO_public -j FWDO_public_log
-A FWDO_public -j FWDO_public_deny
-A FWDO_public -j FWDO_public_allow
-A ВХОДНЫЕ_ЗОНЫ -i eth0 -g IN_public
-A ЗОНЫ_ВХОДА -g ВХОД_публичный
-A IN_public -j IN_public_log
-A IN_public -j IN_public_deny
-A IN_public -j IN_public_allow
-A IN_public -p icmp -j ПРИНЯТЬ
-A IN_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate НОВЫЙ -j ПРИНЯТЬ
СОВЕРШИТЬ
# Завершено в субботу, 15 апреля 01:40:57 2017 г.


Заметка 2:
Я настроил веб-сервер Apache на отдельном хосте, к которому имеет доступ только локальный сервер. Я запустил tcpdump на веб-сервере, прослушивающем порт 80. При запуске telnet webserver 80я захватываю следующие пакеты. Это ожидаемое поведение, поскольку установлено TCP-соединение (S, S-Ack, Ack).

[пользователь@вебсервер ~]$ sudo tcpdump -nn -vv 'порт не 22, а 80' -i eth0
tcpdump: прослушивание на eth0, тип соединения EN10MB (Ethernet), размер захвата 65535 байт
07:17:30.411474 IP (tos 0x10, ttl 64, id 34376, смещение 0, флаги [DF], proto TCP (6), длина 60)
    local.server.46710 > web.server.80: Флаги [S], cksum 0x8412 (неверно -> 0x6d96), seq 3018586542, win 29200, параметры [mss 1460,sackOK,TS val 3047398 ecr 0,nop,wscale 7], длина 0
07:17:30.411557 IP (tos 0x0, ttl 64, id 0, смещение 0, флаги [DF], proto TCP (6), длина 60)
    web.server.80 > local.server.46710: Флаги [S.], cksum 0x8412 (неверно -> 0x9114), seq 2651711943, ack 3018586543, win 28960, параметры [mss 1460,sackOK,TS val 37704524 ecr 3047398,nop,wscale 7], длина 0
07:17:30.411725 IP (tos 0x10, ttl 64, id 34377, смещение 0, флаги [DF], proto TCP (6), длина 52)
    local.server.46710 > web.server.80: Флаги [.], cksum 0x840a (неверно -> 0x301c), seq 1, ack 1, win 229, параметры [nop,nop,TS val 3047398 ecr 37704524], длина 0

Когда я пытаюсь подключиться к веб-серверу с удаленного сервера через локальный сервер, tcpdump на веб-сервере не захватывает никаких пакетов (даже начальный Sync), но локальный сервер захватывает пакет Sync, отправляемый на веб-сервер (см. ниже). Это заставляет меня думать, что что-то мешает отправке пакетов на веб-сервер — возможно, неправильная конфигурация или брандмауэр.

[user@local ~]$ sudo tcpdump -nn -vv 'порт не 22 и не 80' -i любой
tcpdump: прослушивание любого, тип соединения LINUX_SLL (Linux cooking), размер захвата 65535 байт
02:24:09.135842 IP (tos 0x10, ttl 64, id 38062, смещение 0, флаги [DF], proto TCP (6), длина 60)
    10.0.2.2.50558 > web.server.80: Флаги [S], cksum 0x668d (верно), seq 69756226, win 29200, параметры [mss 1460,sackOK,TS val 4780524 ecr 0,nop,wscale 7], длина 0

ВАЖНЫЙ:пакеты не маршрутизируются через eth0, а вместо этого делается попытка отправить пакеты на веб-сервер через tun0 (что не удается). Я могу подтвердить это, запустив tcpdump на интерфейсе tun0:

[user@local ~]$ sudo tcpdump -nn -vv 'порт не 22, а 80' -i tun0
tcpdump: прослушивание tun0, тип соединения RAW (Raw IP), размер захвата 65535 байт
02:28:10.295972 IP (tos 0x10, ttl 64, id 46976, смещение 0, флаги [DF], proto TCP (6), длина 60)
    10.0.2.2.50560 > webserver.80: Флаги [S], cksum 0xd560 (верно), seq 605366388, win 29200, параметры [mss 1460,sackOK,TS val 5021684 ecr 0,nop,wscale 7], длина 0


Заметка 3:
Я отключил firewalld на локальном компьютере, и пакеты синхронизации были получены веб-сервером.

[пользователь@локальный ~]$ sudo systemctl остановить firewalld
[пользователь@вебсервер ~]$ sudo tcpdump -nn -vv 'порт не 22, а 80' -i eth0
tcpdump: прослушивание на eth0, тип соединения EN10MB (Ethernet), размер захвата 65535 байт
08:25:17.390912 IP (tos 0x10, ttl 63, id 61767, смещение 0, флаги [DF], proto TCP (6), длина 60)
    10.0.2.2.50580 > web.server.80: Флаги [S], cksum 0x30dc (верно), seq 2601927549, win 29200, параметры [mss 1460,sackOK,TS val 7123514 ecr 0,nop,wscale 7], длина 0
08:25:17.391003 IP (tos 0x0, ttl 64, id 0, смещение 0, флаги [DF], proto TCP (6), длина 60)
    web.server.80 > 10.0.2.2.50580: Флаги [S.], cksum 0x4e23 (неверно -> 0xa316), seq 959115533, ack 2601927550, win 28960, параметры [mss 1460,sackOK,TS val 41771503 ecr 7123514,nop,wscale 7], длина 0
08:25:17.391192 IP (tos 0x0, ttl 128, id 60032, смещение 0, флаги [нет], proto TCP (6), длина 40)
    10.0.2.2.50580 > web.server.80: Флаги [R], cksum 0x7339 (верно), seq 2601927550, win 8192, длина 0
08:25:18.393794 IP (tos 0x10, ttl 63, id 61768, смещение 0, флаги [DF], proto TCP (6), длина 60)
    10.0.2.2.50580 > web.server.80: Флаги [S], cksum 0x2cf1 (верно), seq 2601927549, win 29200, параметры [mss 1460,sackOK,TS val 7124517 ecr 0,nop,wscale 7], длина 0
08:25:18.393898 IP (tos 0x0, ttl 64, id 0, смещение 0, флаги [DF], proto TCP (6), длина 60)
    web.server.80 > 10.0.2.2.50580: Флаги [S.], cksum 0x4e23 (неверно -> 0x7e71), seq 974785773, ack 2601927550, win 28960, параметры [mss 1460,sackOK,TS val 41772506 ecr 7124517,nop,wscale 7], длина 0
08:25:18.394003 IP (tos 0x0, ttl 128, id 60033, смещение 0, флаги [нет], proto TCP (6), длина 40)
    10.0.2.2.50580 > web.server.80: Флаги [R], cksum 0x566a (верно), seq 2601927550, win 8192, длина 0

Теперь ясно, что исходный IP должен быть обновлен, чтобы соответствовать IP-адресу локального сервера, прежде чем пакет будет отправлен на веб-сервер. Как предположил @xin, NAT должен быть настроен на локальном сервере.


Примечание №4:
Как только я пытаюсь подключиться к веб-серверу, я вижу, что количество пакетов для правила 9 увеличивается на 1 (как показано ниже).

[пользователь@локальный ~]$ sudo iptables -nvL --line-numbers
..........
Цепочка FORWARD (политика ACCEPT 0 пакетов, 0 байт)
число пакетов байт цель защита выбор вход выход источник назначение         
1 0 0 ПРИНЯТЬ все -- * * 0.0.0.0/0 0.0.0.0/0 ctstate СВЯЗАННЫЕ, УСТАНОВЛЕНЫ
2 0 0 ПРИНЯТЬ все -- lo * 0.0.0.0/0 0.0.0.0/0           
3 1 60 FORWARD_direct все -- * * 0.0.0.0/0 0.0.0.0/0           
4 1 60 FORWARD_IN_ZONES_SOURCE все -- * * 0.0.0.0/0 0.0.0.0/0           
5 1 60 FORWARD_IN_ZONES все -- * * 0.0.0.0/0 0.0.0.0/0           
6 1 60 FORWARD_OUT_ZONES_SOURCE все -- * * 0.0.0.0/0 0.0.0.0/0           
7 1 60 ЗОНЫ_ПЕРЕДАЧИ_ИЗ_НАЗАД все -- * * 0.0.0.0/0 0.0.0.0/0           
8 0 0 ОТБРОСИТЬ все -- * * 0.0.0.0/0 0.0.0.0/0 ctstate НЕВЕРНО
9 1 60 ОТКЛОНИТЬ все -- * * 0.0.0.0/0 0.0.0.0/0 отклонить-с-icmp-хост-запрещено
..........
[пользователь@локальный ~]$ sudo iptables -D ПЕРЕНАПРАВИТЬ 9

После удаления правила 9 из цепочки FORWARD (выше, как предложил @xin) я могу подключиться к веб-серверу.

[пользователь@локальный ~]$ sudo iptables -nvL --line-numbers
..........
Цепочка FORWARD (политика ACCEPT 1 пакет, 60 байт)
число пакетов байт цель защита выбор вход выход источник назначение         
1 12 5857 ПРИНЯТЬ все -- * * 0.0.0.0/0 0.0.0.0/0 ctstate СВЯЗАННЫЕ, УСТАНОВЛЕНЫ
2 0 0 ПРИНЯТЬ все -- lo * 0.0.0.0/0 0.0.0.0/0           
3 2 120 FORWARD_direct все -- * * 0.0.0.0/0 0.0.0.0/0           
4 2 120 FORWARD_IN_ZONES_SOURCE все -- * * 0.0.0.0/0 0.0.0.0/0           
5 2 120 FORWARD_IN_ZONES все -- * * 0.0.0.0/0 0.0.0.0/0           
6 2 120 FORWARD_OUT_ZONES_SOURCE все -- * * 0.0.0.0/0 0.0.0.0/0           
7 2 120 ЗОНЫ_ПЕРЕДАЧИ_ИЗ_НАЗАД все -- * * 0.0.0.0/0 0.0.0.0/0           
8 0 0 ОТБРОСИТЬ все -- * * 0.0.0.0/0 0.0.0.0/0 ctstate НЕВЕРНО
..........

решение1

Исходный адрес пакетов следует заменить на один из адресов локальной машины, чтобы ответы могли быть получены локальной машиной, в противном случае нет (веской) причины отправлять эти пакеты на следующие маршрутизаторы, ответ в любом случае не может быть перехвачен. iptables MASQUERADEи SNATполезны для изменения исходного адреса этих пакетов:

[user@local ~]$ iptables -t nat -A POSTROUTING -s 10.0.2.2/32 ! -d 10.0.2.1/30 -j MASQUERADE -o eth0

Связанный контент