Туннелирование публичного IP на удаленную машину

8

У меня есть сервер Linux A с блоком из 5 общедоступных IP-адресов 8.8.8.122/29. В настоящее время 8.8.8.122назначается eth0и 8.8.8.123назначается eth0:1.

У меня есть другая машина Linux B в удаленном месте, за NAT. Я хотел бы установить туннель между ними, чтобы B мог использовать IP-адрес в 8.8.8.123качестве своего основного IP-адреса.

OpenVPN, вероятно, является ответом, но я не могу понять, как это настроить ( topology subnetили topology p2pможет быть уместным. Или я должен использовать мост Ethernet?). Безопасность и шифрование не являются большой проблемой на этом этапе, поэтому GRE также будет в порядке - компьютер B будет исходить с известного IP-адреса и может быть аутентифицирован на основании этого.

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

Джим Пэрис
источник
Какие брандмауэры находятся в обоих местах?
Роберт
1
Надеюсь, вы просто составили эти адреса, а не работаете в Google. Если вы этого не сделаете, вы не сможете использовать их адресное пространство.
Майкл Хэмптон
Роберт: A - это сервер Linux с некоторыми простыми iptablesправилами. B находится за NAT, на котором работает еще один сервер Linux shorewall.
Джим Пэрис
Майкл: Да, я изменил первые три октета на 8, чтобы запутать их, но все же указал, что они публичные. Извините, Google.
Джим Пэрис
1
Для дальнейшего использования у нас есть RFC для этого .
Майкл Хэмптон

Ответы:

7

Я закончил тем, что пошел с мостом Ethernet. Множество невероятно подробных примеров, чтобы пройти через онлайн, но это оказывается довольно легко:

Во- первых, на А , /etc/network/interfacesбыл изменен с:

auto eth0
iface eth0 inet static
    address 8.8.8.122
    netmask 255.255.255.248
    gateway 8.8.8.121

чтобы:

auto br0
iface br0 inet static
    address 8.8.8.122
    netmask 255.255.255.248
    gateway 8.8.8.121
    pre-up openvpn --mktun --dev tap0
    bridge_ports eth0 tap0
    bridge_fd 3

для соединения eth0(реальный интерфейс WAN) с tap0(новым туннельным интерфейсом) при загрузке.

Затем на A запустите сервер openvpn с:

openvpn --dev tap0

На B подключитесь к нему с помощью:

openvpn --remote 8.8.8.122 --dev tap0 --route-gateway 8.8.8.121 \
        --redirect-gateway def1 --ifconfig 8.8.8.123 255.255.255.248

Это супер простая конфигурация, которую я искал, и она работает - B теперь общедоступен в 8.8.8.123, и исходящие соединения происходят с того же адреса.

Конечно, добавляйте безопасность ( --secretи --tls-serverт. Д.) По мере необходимости.

Джим Пэрис
источник
Ницца! Я собираюсь попробовать это. Вы нашли способ настроить это: «не позволяя тем клиентам использовать IP-адреса, на которые у них нет прав»?
Бастиан
Я не беспокоился о своей настройке (которая была временной), но я думаю, что вы могли бы сделать это с помощью ebtables.
Джим Пэрис
Очень полезный. Вопрос: что мне нужно изменить в конфигурации A, если мне нужно маршрутизировать два IP из A: A => B и A => C (где C - другой хост)? Нужно ли настраивать другой мост?
frhack
2
Да. Добавьте еще одну pre-up openvpnстроку , чтобы создать tap1тоже добавить tap1к bridge_ports, и запустить еще один экземпляр OpenVPN с openvpn --dev tap1.
Джим Пэрис
Как насчет того, если вы хотите сделать шлюз A локальным через B, чтобы любая система в локальной сети могла использовать B и назначить удаленный шлюз по умолчанию и использовать публичные IP-адреса?
Ариб Су Ясир
1

Я думаю, тебе будет тяжело. Большинству брандмауэров будет трудно маршрутизировать трафик OpenVPN, если обе стороны VPN находятся в одной подсети.

Если вы пытаетесь маршрутизировать для общего доступа, я бы переместил оба сервера в разные подсети с ваших публичных адресов, а затем использовал бы виртуальные IP-адреса (от 1 до 1 Nat) для их соединения. Для соединения двух сайтов будет работать OpenVPN или туннель IP-Sec.

Виртуальные IP-адреса: http://doc.pfsense.org/index.php/What_are_Virtual_IP_Addresses%3F

Сайт на сайт: http://doc.pfsense.org/index.php/VPN_Capability_IPsec

Редактировать на основе комментариев:

Я лично установил бы pfSense на коробке A и дал бы порт, который вы хотели для его WAN. Затем настройте сервер OpenVPN в локальной подсети (который готов к работе в веб-интерфейсе pfSense) и настройте другой компьютер с виртуальным IP-адресом, указанным на его локальный IP-адрес OpenVPN. Это даст вам возможность для дальнейшего расширения (добавьте больше машин с виртуальными IP-адресами, логически перенаправляйте определенные порты на разные серверы, действительно установите полноценную настройку LAN / WAN / DMZ с OpenVPN для виртуального доступа. Не говоря уже о том, что у вас будет полноценный маршрутизатор, так что он, вероятно, будет более безопасным.

Роберт
источник
Я не понимаю, как задействованы промежуточные брандмауэры; они , конечно , не будет смотреть внутри пакетов OpenVPN между A и B . Что касается самой конфигурации OpenVPN, я ожидал, что что-то подобное push "route 50.7.19.122 255.255.255.255 net_gateway"будет гарантировать, что данные VPN все еще передаются по обычной сети.
Джим Пэрис
Чтобы было ясно, я хочу создать туннель непосредственно между A и B , а не на отдельных брандмауэрах на каждом конце.
Джим Пэрис
1
Но когда компьютер A хочет подключиться к компьютеру B, он не будет знать, должен ли он использовать WAN (с вашими общедоступными IP-адресами), LAN (со своим статическим IP-адресом) или OpenVPN (также с вашими общедоступными IP-адресами), поскольку все они та же подсеть. B к A должен работать, хотя.
Роберт
1
Также есть это, у меня было это работает, но не с публичными IP-адресами. Я думаю, что виртуальные IP-адреса будут намного лучше в любом случае. openvpn.net/index.php/open-source/documentation/miscellaneous/…
Роберт
«Чтобы было ясно, я хочу создать туннель непосредственно между A и B, а не на отдельных брандмауэрах на каждом конце». Вам нужно будет где-нибудь открыть порт для сервера OpenVPN
Robert