2

Я гуглил это несколько дней безуспешно. Время от времени я подключаюсь к VPN с моего сервера и пытаюсь настроить свой сервер Debian на использование только портов 80 и 443 через VPN и всех других портов через интерфейс eth0.

Любая помощь, чтобы сделать это высоко ценится.

2 ответа2

1

Сначала просмотрите это руководство: http://lartc.org/howto/lartc.rpdb.multiple-links.html (и / или другие руководства по использованию нескольких маршрутов по умолчанию).

Так что в вашем случае, я думаю, что решение будет настроить два сетевых интерфейса (по умолчанию eth0 и, например, eth0:1 с другим действительным IP-адресом от вашей локальной сети) для вашего сервера, а затем настроить маршруты так, чтобы по умолчанию весь трафик шел в vpn и трафик, исходящий из вторичного интерфейса, остается за пределами сети VPN. Затем с помощью ssh свяжите вторичный интерфейс с опцией -b.

ИЛИ настройте несколько маршрутов так, чтобы трафик со вторичного интерфейса направлялся в vpn, затем настройте прокси-сервер www, связанный (только) с вторичным IP-адресом. Затем используйте этот прокси-сервер с браузерами.

ИЛИ, если вы используете (только) wget, выполните вышеизложенное и используйте опцию --bind-address для привязки к вторичному интерфейсу.

ИЛИ менее общее решение, так как 20 декабря Лоран прокомментировал другой ответ, вы можете настроить конкретный IP-маршрут для серверов, к которым вы подключаетесь, без необходимости использовать несколько таблиц маршрутизации. Как это:

route add -host [the host you're connecting to] gateway [your gateway address]

Вот пример из реального мира. У меня установлено соединение vpn, адрес vpn - 23.21.xxx.yyy, а мой локальный внешний адрес - 91.157.xxx.yyy, а адрес локального внутреннего шлюза - 192.168.0.1.

root@dell64:~# curl -s ipchicken.com|egrep '[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+.*<br>'|sed 's/[0-9][0-9]*[.][0-9][0-9]* .*/xxx.yyy/'
        23.21.xxx.yyy
root@dell64:~# route add -host ipchicken.com gateway 192.168.0.1
root@dell64:~# curl -s ipchicken.com|egrep '[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+.*<br>'|sed 's/[0-9][0-9]*[.][0-9][0-9]* .*/xxx.yyy/'
        91.157.xxx.yyy

(Сайт ipchicken.com просто отображает ваш внешний IP-адрес, а grep фильтрует только строку с внешним IP-адресом, а sed заменяет последние части на xxx.yyy)

0

Если под "использованием" вы подразумеваете получение запросов и обслуживание сайтов, вам необходимо настроить Apache (или ваш веб-сервер) для этого с помощью Listen vpnIP:80 и Listen vpnIP:443 . Так что это не будет работать на других IP-адресах.

Кроме того, используя iptables, вы можете DROP порты 80 и 443 для eth0 и разрешать только на интерфейсе VPN (я использовал tun0 ниже) с;

-A INPUT -i eth0 -p tcp -m tcp --dport 80 -j DROP
-A INPUT -i eth0 -p tcp -m tcp --dport 443 -j DROP
-A INPUT -i tun0 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i tun0 -p tcp -m tcp --dport 443 -j ACCEPT

Если под "использованием" вы подразумеваете исходящее соединение (серфинг в Интернете), один из способов - установить прокси (например, squid) на сервере (или где-то в VPN) и настроить прокси для отправки всего трафика через шлюз VPN по умолчанию. Вы можете использовать таблицу iptables NAT для перенаправления портов 80 и 443 на порт прокси (3128 для squid), используя:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.2:3128
iptables -t nat -A PREROUTING -i tun0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Предполагая, что:

tun0 = vpn interface
192.168.1.2 = IP of your server on tun0 (vpn)

И сделать то же самое для порта 443.

Возможно, требуется некоторое тестирование и корректировка, но при таком подходе это обычное поведение.

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