Мне нужно направить трафик на какой-то хост в Интернете через VPN-сервер.
Конфигурация:
Компьютер: ubuntu-12.04
eth0 - хххх/24
tun0 - inet addr:10.8.0.6 PtP:10.8.0.5 Маска:255.255.255.255
Есть сервер OpenVPN (Amazon):
убунту-12.04
eth0 - гггг/24
tun0 - inet addr:10.8.0.1 PtP:10.8.0.2 Маска:255.255.255.255
В Интернете есть хост IP: qqqq
Я хочу, чтобы трафик на qqqq шел через OpenVPN сервер. Для этого я делаю:
iptables:
Я отмечаю пакеты в таблице mangle:
sudo iptables -t mangle -A OUTPUT -d q.q.q.q -j MARK --set-mark 2
Я отправляю трафик на qqqq throw tun0:
sudo iptables -t nat -A POSTROUTING -d q.q.q.q -j SNAT --to-source 10.8.0.6
iproute2:
Я создаю таблицу "100" в /etc/iproute2/rt_tables
sudo ip rule add fwmark 2 table 100
sudo ip route add default via 10.8.0.5 table 100
tcpdump на 1-м компьютере:
14:22:04.554399 IP 10.8.0.6 > qqqq.clodo.ru : ICMP-эхо-запрос, идентификатор 11717, последовательность 1, длина 64
14:22:04.681918 IP qqqq.clodo.ru > 10.8.0.6 : ICMP эхо-ответ, идентификатор 11717, последовательность 1, длина 64
14:22:05.562577 IP 10.8.0.6 > qqqq.clodo.ru : ICMP-эхо-запрос, идентификатор 11717, последовательность 2, длина 64
14:22:05.690240 IP qqqq.clodo.ru > 10.8.0.6 : ICMP эхо-ответ, идентификатор 11717, последовательность 2, длина 64
Но пинга нет. Отправлено 2 пакета, получено 0, потеря пакетов 100%.
решение1
Вам не нужно маркировать пакеты. Для того, чтобы сделать то, что вы планируете, вам понадобится следующее:
в файл конфигурации сервера добавьте следующее:
"push route q.q.q.q 255.255.255.255"
Вышеуказанное действие передаст маршрут на сторону клиента, поэтому весь трафик, отправляемый от клиента на этот IP-адрес, будет отправляться через туннель OpenVPN.
Также на стороне сервера вам необходимо принять входящий трафик от клиента, вы можете принять весь трафик, поступающий из клиентской подсети, следующим образом:
iptables -A INPUT -s 10.8.0.0/24 -j ACCEPT
вам также может понадобиться это не уверен:
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
Вам необходимо преобразовать входящий трафик со стороны клиента на сторону сервера [сделать это на стороне сервера]
iptables -t nat -A POSTROUTING -d q.q.q.q -j SNAT --to-source PUBLIC_IP_OR_YOUR_VPN_SERVER
И вам не нужны iproute2 или таблица mangle.
Порядок правил имеет значение, поэтому порадуйте их, прежде чем применять соответствующее правило сброса.