Як створити / налаштувати vpn, використовуючи лише SSH?


9

Ось проблема, яку я намагаюся вирішити. Є сервер ("віддалена система"), на який я можу перейти з мого локального комп'ютера, але ця віддалена система не має підключення до Інтернету. Я хочу надати віддаленій системі доступ до Інтернету через свій локальний комп'ютер за допомогою VPN на базі ssh. Як я це досягну? Я спробував наступне, що, здається, частково працює. Що я маю на увазі під "частковою роботою", це те, що пакети з'єднання (пакети синхронізації) надсилаються на мій локальний комп'ютер, але не вдається встановити з'єднання з Інтернетом. Я використовую tcpdump для зйомки пакетів на локальному комп'ютері. Локальний комп'ютер і віддалена система працюють як центоси 7.

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

[user @ remote ~] шоу ip addr
1: lo: mtu 65536 qdisc noqueue state UNKNOWN 
    посилання / зворотний зв'язок 00: 00: 00: 00: 00: 00 brd 00: 00: 00: 00: 00: 00
    inet 127.0.0.1/8 область хосту lo
       valid_lft назавжди віддав перевагу_lft назавжди
    inet6 :: 1/128 хост діапазону 
       valid_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
       valid_lft 1785sec перевагу_lft 1785сек
    inet6 EEEE: FFFF: GGGG: HHHH: IIII: JJJJ: KKKK: LLLL / 64 global global noprefixroute динамика 
       valid_lft 2591987sec кращий_lft 604787сек
    inet6 ABCD :: IIII: JJJJ: KKKK: LLLL / 64 посилання на область застосування 
       valid_lft назавжди віддав перевагу_lft назавжди
[user @ local ~] шоу ip addr
1: lo: mtu 65536 qdisc noqueue state UNKNOWN 
    посилання / зворотний зв'язок 00: 00: 00: 00: 00: 00 brd 00: 00: 00: 00: 00: 00
    inet 127.0.0.1/8 область хосту lo
       valid_lft назавжди віддав перевагу_lft назавжди
    inet6 :: 1/128 хост діапазону 
       valid_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
       valid_lft 1785sec перевагу_lft 1785сек
    inet6 EEEE: FFFF: GGGG: HHHH: IIII: JJJJ: KKKK: LLLL / 64 global global noprefixroute динамика 
       valid_lft 2591987sec кращий_lft 604787сек
    inet6 ABCD :: IIII: JJJJ: KKKK: LLLL / 64 посилання на область застосування 
       valid_lft назавжди віддав перевагу_lft назавжди

Створіть інтерфейс tun0 у віддаленій системі.

[user @ remote ~] $ sudo ip tuntap додати настройку tun0 mode
[user @ remote ~] шоу ip addr
1: lo: mtu 65536 qdisc noqueue state UNKNOWN 
    посилання / зворотний зв'язок 00: 00: 00: 00: 00: 00 brd 00: 00: 00: 00: 00: 00
    inet 127.0.0.1/8 область хосту lo
       valid_lft назавжди віддав перевагу_lft назавжди
    inet6 :: 1/128 хост діапазону 
       valid_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
       valid_lft 1785sec перевагу_lft 1785сек
    inet6 EEEE: FFFF: GGGG: HHHH: IIII: JJJJ: KKKK: LLLL / 64 global global noprefixroute динамика 
       valid_lft 2591987sec кращий_lft 604787сек
    inet6 ABCD :: IIII: JJJJ: KKKK: LLLL / 64 посилання на область застосування 
       valid_lft назавжди віддав перевагу_lft назавжди
3: tun0: mtu 1500 qdisc noop state DOWN qlen 500
    посилання / немає 

Створіть інтерфейс tun0 в локальній системі.

[user @ local ~] $ sudo ip tuntap додати настройку tun0 mode
[user @ local ~] шоу ip addr
1: lo: mtu 65536 qdisc noqueue state UNKNOWN 
    посилання / зворотний зв'язок 00: 00: 00: 00: 00: 00 brd 00: 00: 00: 00: 00: 00
    inet 127.0.0.1/8 область хосту lo
       valid_lft назавжди віддав перевагу_lft назавжди
    inet6 :: 1/128 хост діапазону 
       valid_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
       valid_lft 1785sec перевагу_lft 1785сек
    inet6 EEEE: FFFF: GGGG: HHHH: IIII: JJJJ: KKKK: LLLL / 64 global global noprefixroute динамика 
       valid_lft 2591987sec кращий_lft 604787сек
    inet6 ABCD :: IIII: JJJJ: KKKK: LLLL / 64 посилання на область застосування 
       valid_lft назавжди віддав перевагу_lft назавжди
3: tun0: mtu 1500 qdisc noop state DOWN qlen 500
    посилання / немає

Призначте ip адресу tun0 та підведіть її:

[user @ local ~] $ sudo ip addr додати 10.0.2.1/30 dev tun0
[user @ local ~] $ sudo ip посилання встановило dev tun0 вгору
[user @ local ~] $ ip addr show tun0
3: tun0: mtu 1500 qdisc pfifo_fast state DOWN qlen 500
    посилання / немає 
    inet 10.0.2.1/30 global global tun0
       valid_lft назавжди віддав перевагу_lft назавжди
[user @ remote ~] $ sudo ip addr додати 10.0.2.2/30 dev tun0
[user @ remote ~] $ sudo ip посилання встановлено dev tun0 up
[user @ remote ~] $ ip addr show tun0
3: tun0: mtu 1500 qdisc pfifo_fast state DOWN qlen 500
    посилання / немає 
    inet 10.0.2.2/30 global global tun0
       valid_lft назавжди віддав перевагу_lft назавжди

Змініть sshd_config на віддаленій та локальній системах, щоб включити тунелювання:

[user @ remote ~] $ sudo grep PermitTunnel / etc / ssh / sshd_config 
PermitTunnel "точка-точка"
[user @ local ~] $ sudo grep PermitTunnel / etc / ssh / sshd_config 
PermitTunnel "точка-точка"

Створіть тунель ssh:

[user @ local ~] $ sudo ssh -f -w0: 0 root @ remote true
пароль root @ remote: 
[користувач @ локальний ~] $ ps aux | grep root @ віддалений
корінь 1851 0,0 0,0 76112 1348? Ss 23:12 0:00 ssh -f -w0: 0 root @ remote true

Тестуйте ping на обох серверах за допомогою нових ip-адрес:

[user @ local ~] $ 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 ping статистика ---
Передано 2 пакети, 2 отримані, 0% втрати пакету, час 1002 мс
rtt min / avg / max / mdev = 0.861 / 1.274 / 1.688 / 0.415 мс
[user @ remote ~] $ 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 ping статистика ---
2 передані пакети, 2 отримані, 0% втрати пакету, час 1000 мс
rtt min / avg / max / mdev = 0,589 / 0,739 / 0,889 / 0,150 мс
[user @ remote ~] $ route
Таблиця маршрутизації IP ядра
Шлюз призначення Генмаска Прапори Метричні посилання Використання 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
[user @ remote ~] $ ip route show
за замовчуванням через AAA.BBB.CCC.1 dev eth0 протостатичний показник 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:

[user @ local ~] $ 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-адреси через локальний комп'ютер.

[user @ remote ~] $ sudo ip route add 173.194.219.0/24 dev tun0
[user @ remote ~] $ route
Таблиця маршрутизації IP ядра
Шлюз призначення Генмаска Прапори Метричні посилання Використання 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
[user @ remote ~] $ ip route show
за замовчуванням через AAA.BBB.CCC.1 dev eth0 протостатичний показник 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:

[user @ local ~] $ grep ip_forward /etc/sysctl.conf 
net.ipv4.ip_forward = 1
[user @ local ~] перезапуск сервісної мережі $ sudo
Перезапуск мережі (через systemctl): [OK]

Налаштування захоплення пакетів на локальному комп'ютері за допомогою tcpdump:

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

Спроба підключитися до google з віддаленого сервера.

[user @ remote ~] $ openssl s_client -connect google.com:243
socket: Нема маршруту до хоста
підключити: 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, offset 0, прапори [DF], протокол 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, прапори [немає], протокол 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], протокол 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, offset 0, прапори [DF], протокол 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, offset 0, прапори [немає], протокол 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], протокол 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, offset 0, прапори [DF], протокол 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, прапори [немає], протокол 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], протокол 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:

[user @ local ~] $ sudo iptables -t nat -A РОЗМІСТЕННЯ -s 10.0.2.2/32! -d 10.0.2.1/30 -j MASQUERADE -o eth0
[user @ local ~] $ 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]
: POSTROUTING_ZONES - [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]
: PREROUTING_ZONES - [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 PREROUTING_direct
-A ПЕРЕДАЧА -j PREROUTING_ZONES_SOURCE
-A ПЕРЕВІРКА -j PREROUTING_ZONES
-A OUTPUT -j OUTPUT_direct
-A POSTROUTING -j POSTROUTING_direct
-A POSTROUTING -j POSTROUTING_ZONES_SOURCE
-A ПОСТРОЮВАННЯ -j POSTROUTING_ZONES
-А РОЗМІСТЕННЯ -s 10.0.2.2/32! -d 10.0.2.0/30 -j МАСКЕРАД
-A POSTROUTING_ZONES -o eth0 -g POST_public
-A POSTROUTING_ZONES -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 PREROUTING_ZONES -i eth0 -g PRE_public
-A PREROUTING_ZONES -g PRE_public
-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]
: PREROUTING_ZONES - [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 PREROUTING_direct
-A ПЕРЕДАЧА -j PREROUTING_ZONES_SOURCE
-A ПЕРЕВІРКА -j PREROUTING_ZONES
-A INPUT -j INPUT_direct
-А Вперед, -j FORWARD_direct
-A OUTPUT -j OUTPUT_direct
-A POSTROUTING -j POSTROUTING_direct
-A PREROUTING_ZONES -i eth0 -g PRE_public
-A PREROUTING_ZONES -g PRE_public
-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 INPUT -j INPUT_direct
-А Вперед, -j FORWARD_direct
-A OUTPUT -j OUTPUT_direct
КОМІТЕТ
# Завершено сб 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 PREROUTING_direct
-A OUTPUT -j OUTPUT_direct
КОМІТЕТ
# Завершено сб 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]
: INPUT_ZONES - [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 INPUT -m conntrack - держава, ЗВ'ЯЗАНА, Встановлена ​​-j ACCEPT
-A ВХОД -i lo -j ПРИЙМАНО
-A INPUT -j INPUT_direct
-A ВХОД -j INPUT_ZONES_SOURCE
-A ВХОД -j INPUT_ZONES
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -j REJECT - відхилити-з icmp-хостом-заборонено
-ПЕРЕДАЙМИ -М континук - держава, ЗВ'ЯЗАНА, Встановлена ​​-j ПРИЙМАНО
-А ВПЕРЕД, -i ось -J ПРИЙМАНО
-А Вперед, -j FORWARD_direct
-А Вперед, -j FORWARD_IN_ZONES_SOURCE
-А Вперед, -j FORWARD_IN_ZONES
-А Вперед, -j FORWARD_OUT_ZONES_SOURCE
-А Вперед, -j FORWARD_OUT_ZONES
-А ВПЕРЕД, -м контракція - держава ІНВАЛІД -j ДРОП
-А ВПЕРЕД, -j REJECT - відхилити-з icmp-хостом-заборонено
-A OUTPUT -j OUTPUT_direct
-A FORWARD_IN_ZONES -i eth0 -g FWDI_public
-A FORWARD_IN_ZONES -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 ACCEPT
-A FWDO_public -j FWDO_public_log
-A FWDO_public -j FWDO_public_deny
-A FWDO_public -j FWDO_public_allow
-A INPUT_ZONES -i eth0 -g IN_public
-A INPUT_ZONES -g IN_public
-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 ACCEPT
-A IN_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
КОМІТЕТ
# Завершено сб 15 квітня 01:40:57 2017


Примітка № 2:
Я встановлюю веб-сервер apache на окремий хост, до якого має доступ лише локальний сервер. Я запустив tcpdump на прослуховування веб-сервера на порту 80. Під час запуску telnet webserver 80я захоплю наступні пакети. Така очікувана поведінка, оскільки встановлено TCP-з'єднання (S, S-Ack, Ack).

[user @ webserver ~] Порт 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], протокол 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, offset 0, прапори [DF], протокол 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], протокол 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 (приготовлено для Linux), розмір захоплення 65535 байт
02: 24: 09.135842 IP (tos 0x10, ttl 64, id 38062, offset 0, прапори [DF], протокол 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], протокол 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 на локальному комп'ютері, і веб-сервер отримав пакети синхронізації.

[user @ local ~] $ sudo systemctl зупинити firewalld
[user @ webserver ~] Порт sudo tcpdump -nn -vv 'не 22, а 80' -i eth0
tcpdump: прослуховування на eth0, тип посилання EN10MB (Ethernet), розмір захоплення 65535 байт
08: 25: 17.390912 IP (tos 0x10, ttl 63, id 61767, offset 0, прапори [DF], протокол 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, offset 0, прапори [DF], протокол 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, offset 0, прапори [немає], протокол 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, offset 0, прапори [DF], протокол 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, offset 0, прапори [DF], протокол 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, offset 0, прапори [немає], протокол TCP (6), довжина 40)
    10.0.2.2.50580> web.server.80: Прапори [R], cksum 0x566a (правильний), seq 2601927550, win 8192, довжина 0

Тепер ясно, що IP-код джерела потрібно оновити, щоб він відповідав ip-адресу локального сервера, перш ніж пакет буде надісланий веб-серверу. Як @xin запропонував, NAT потрібно встановити на локальному сервері.


Примітка №4:
Щойно я намагаюся підключитися до веб-сервера, я можу побачити, що число pkts для правила 9 збільшується на 1 (як показано нижче).

[user @ local ~] $ sudo iptables -nvL - рядки
..........
Ланцюг Вперед (політика ACCEPT 0 пакетів, 0 байт)
num pkts bytes target prot відключити вихідне місце призначення         
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 all - * * 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 FORWARD_OUT_ZONES всі - * * 0.0.0.0/0 0.0.0.0/0           
8 0 0 DROP all - * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
9 1 60 REJECT all - * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-хост-заборонено
..........
[user @ local ~] $ sudo iptables -D ВПЕРЕД 9

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

[user @ local ~] $ sudo iptables -nvL - рядки
..........
Ланцюг Вперед (політика ACCEPT 1 пакетів, 60 байт)
num pkts bytes target prot відключити вихідне місце призначення         
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 all - * * 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 FORWARD_OUT_ZONES всі - * * 0.0.0.0/0 0.0.0.0/0           
8 0 0 DROP all - * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
..........

Відповіді:


4

Адреса джерела пакетів повинна бути замінена однією з адрес локальної машини, щоб відповіді могли бути отримані місцевою машиною, інакше немає (вагомих) причин для надсилання цих пакетів на наступні маршрутизатори, відповідь все-таки не вдалося отримати. 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

Дякуємо за відповідь @xin. Я виконав команду, яку ви надали, але я все одно отримав таку ж відповідь. Я запустив tcpdump на eth0 і tun0. пакети не перенаправлені до eth0. tun0 досі намагається дотягнутися до google. Чи потрібно мені якось маршрутизувати пакети від tun0 до eth0?
Алі

1
Якщо локальна машина використовує інтерфейс eth0 для підключення до Інтернету, пакети повинні переходити до eth0 навіть без цієї команди. Тож, можливо, задіяний певний налаштування брандмауера. Чи можете ви поставити iptables-saveвихід локальної машини?
reith

Я додав вихід iptables-save до оригінальної публікації.
Алі

Пожежну шафу потрібно було вимкнути. Я запустив вашу команду після відключення firewalld, і з'єднання почало працювати! Вдячний за вашу допомогу! Оформлення замовлення в оригінальній публікації, щоб побачити прогрес.
Алі

1
хороша робота. Схоже, проблемою є правило iptable -A FORWARD -j REJECT --reject-with icmp-host-prohibited. пакети, що надходять на вашу машину та мають адреса призначення з вашої машини, перейдуть до ланцюга FORWARD, тому відмініть це правило.
reith
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.