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

1 ответ1

0

Это заняло у меня некоторое время, но я понял это. Не так легко, как я надеялся, но это работает. Спасибо @dirkt за указание в правильном направлении.

Сначала создайте следующие скрипты в каталоге /usr /local /bin:

nsstart:

#!/bin/sh

# Enable eno1 interface
# eno1 is the name of the interface I get my connection from, change it so it fits your system
ip link set eno1 up

# Add 'internet' namespace
ip netns add internet

# Create veth pair and add veth1 to 'internet' namespace
ip link add type veth
ip link set veth1 netns internet
ip link set veth0 up

# Create bridge interface and add eno1 and veth0 to it
ip link add type bridge
ip link set bridge0 up
ip link set eno1 master bridge0
ip link set veth0 master bridge0

# Enable namespace interfaces, add IP and route
ip netns exec internet ip link set lo up
ip netns exec internet ip link set veth1 up

# Set a free IP from your routers IP range here
# You can also use a DHCP client if you have one, mine didn't work with namespaces
ip netns exec internet ip addr add 192.168.1.99/24 dev veth1

# Set IP of the router here
ip netns exec internet ip route add default via 192.168.1.1 metric 10

nsinternet:

#!/bin/sh

# Execute the command in internet namespace as user who called sudo
ip netns exec internet sudo -u "#$SUDO_UID" -g "#$SUDO_GID" -- "$@"

Затем добавьте и включите службу systemd в файле /etc/systemd/system/internet-namespace.service (я использую systemd-networkd для получения моего IP -адреса от моего маршрутизатора, если вы используете что-то другое, измените его ниже, чтобы мост был установлен до того, как клиент DHCP попытается получить для него адрес):

[Unit]
Description=Sets up a namespace that uses real internet connection instead of OpenVPN
After=systemd-udevd.service
Before=systemd-networkd.service network.target
Wants=network.target

[Service]
Type=oneshot
RemainAfterExit=1
ExecStart=/usr/local/bin/nsstart

[Install]
WantedBy=multi-user.target

Затем добавьте эту строку в файл sudoers (это необязательно, это будет сделано, чтобы вам не приходилось вводить пароль при попытке использовать пространство имен, которое мы создали):

%wheel ALL=NOPASSWD: /usr/local/bin/nsinternet

Не забудьте добавить bridge0 к вашему DHCP-клиенту.

Вот и все. Включите службу openvpn-client, и все готово. Теперь пространством имен по умолчанию является пространство, использующее VPN-соединение, и если вы хотите использовать свое настоящее интернет-соединение, просто запустите sudo nsinternet YOUR_COMMAND .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .