Отказано в подключении к общему интернету

На следующем рисунке показана топология моей сети. Schmatic Теперь я хочу направить весь http-трафик с 10.8.0.15 через 10.8.0.42 во внешний мир, используя wlan0. К сожалению, я нуб, когда дело доходит до iptables и маршрутизации. Может ли кто-нибудь указать мне правильное направление?

Правка: До сих пор я выполнил следующие команды на 10.8.0.15

sudo ip rule add fwmark 2 table 3
sudo ip route add default via 10.8.0.42 table 3
sudo ip route flush cache
sudo iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 2
sudo iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 10.8.0.15
sudo sysctl -w net.ipv4.conf.eth0.rp_filter=2
sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination 10.8.0.42

и следующие на 10.8.0.42

sudo iptables -I FORWARD -i eth0 -o wlan0 -s 10.8.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
sudo sysctl -w net.ipv4.ip_forward=1

,когда я теперь хочу проверить соединение на 10.8.0.15 Я получаю следующее

curl http://freegeoip.net/json/
curl: (7) Failed to connect to freegeoip.net port 80: Connection refused

и tcpdump на 10.8.0.42 показывает

sudo tcpdump -n -i eth0 -s 0 src or dst port 80
10:05:18.552329 IP 10.8.0.15.36186 > 10.8.0.42.80: Flags [S], seq 460236380, win 29200, options [mss 1308,sackOK,TS val 22927 ecr 0,nop,wscale 6], length 0
10:05:18.552612 IP 10.8.0.42.80 > 10.8.0.15.36186: Flags [R.], seq 0, ack 460236381, win 0, length 0
10:05:19.068397 IP 10.8.0.15.50052 > 10.8.0.42.80: Flags [S], seq 2824330189, win 29200, options [mss 1308,sackOK,TS val 22969 ecr 0,nop,wscale 6], length 0
10:05:19.068674 IP 10.8.0.42.80 > 10.8.0.15.50052: Flags [R.], seq 0, ack 2824330190, win 0, length 0

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

Обновлять: Теперь я протестировал следующую конфигурацию, как предложено ниже.

box0:

sudo ip route add default via 10.8.0.42 dev tun0 table 3
sudo ip rule add fwmark 2 table 3
sudo ip route flush cache
sudo iptables -A OUTPUT -t mangle -p tcp --dport 80 -j MARK --set-mark 2
sudo sysctl -w net.ipv4.conf.eth0.rp_filter=0
sudo iptables -A POSTROUTING -t nat -o eth0 -p tcp --dport 80 -j SNAT --to-source 10.8.0.15
sudo iptables -A POSTROUTING -t nat -o eth0 -p tcp --dport 443 -j SNAT --to-source 10.8.0.15

box1:

sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -A POSTROUTING -t nat -s 10.8.0.0/24 -p tcp --dport 80 -j SNAT --to-source 192.168.0.2
sudo iptables -A POSTROUTING -t nat -s 10.8.0.0/24 -p tcp --dport 443 -j SNAT --to-source 192.168.0.2

Вывод tcpdump на box1 остается прежним:

12:24:05.788127 IP 10.8.0.15.45844 > 10.8.0.42.80: Flags [S], seq 4169666416, win 29200, options [mss 1308,sackOK,TS val 15420789 ecr 0,nop,wscale 6], length 0
12:24:05.788414 IP 10.8.0.42.80 > 10.8.0.15.45844: Flags [R.], seq 0, ack 4169666417, win 0, length 0
12:24:06.786406 IP 10.8.0.15.45844 > 10.8.0.42.80: Flags [S], seq 4169666416, win 29200, options [mss 1308,sackOK,TS val 15420889 ecr 0,nop,wscale 6], length 0
12:24:06.786694 IP 10.8.0.42.80 > 10.8.0.15.45844: Flags [R.], seq 0, ack 1, win 0, length 0
12:24:08.789821 IP 10.8.0.15.45844 > 10.8.0.42.80: Flags [S], seq 4169666416, win 29200, options [mss 1308,sackOK,TS val 15421089 ecr 0,nop,wscale 6], length 0
12:24:08.790111 IP 10.8.0.42.80 > 10.8.0.15.45844: Flags [R.], seq 0, ack 1, win 0, length 0

Вывод tcpdump на box0:

11:26:14.220391 IP 10.8.0.15.33420 > 158.69.242.138.80: Flags [S], seq 2659446178, win 29200, options [mss 1460,sackOK,TS val 15433635 ecr 0,nop,wscale 6], length 0
11:26:14.308915 IP 10.8.0.42.80 > 10.8.0.15.33420: Flags [R.], seq 0, ack 2659446179, win 0, length 0
11:26:15.211761 IP 10.8.0.15.33420 > 158.69.242.138.80: Flags [S], seq 2659446178, win 29200, options [mss 1460,sackOK,TS val 15433735 ecr 0,nop,wscale 6], length 0
11:26:15.337652 IP 10.8.0.42.80 > 10.8.0.15.33420: Flags [R.], seq 0, ack 1, win 0, length 0

Я полагаю, что основная проблема заключается в том, что назначением для пакетов tcp является 10.8.0.42, когда он поступает в box1, а не IP-адрес URL-адреса (здесь: 158.69.242.138) HTTP-запроса. Но я не вижу, где это место назначения изменено.

2
задан 14 October 2016 в 13:28
2 ответа

Мне кажется, что вам нужен хост с интерфейсом eth0 и wlan0 , чтобы выполнять SNAT для HTTP-трафика, исходящего от устройств в сети, где eth0 подключен к.

Вы можете сделать это следующим образом:

На хосте 10.8.0.15 вы установите 10.8.0.42 по умолчанию шлюз:

ip route add default via 10.8.0.42 dev eth0

На хосте 10.8.0.42 вы включаете SNAT:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -p tcp --dport 80 -j SNAT --to-source 192.168.0.2
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -p tcp --dport 443 -j SNAT --to-source 192.168.0.2

Это включает NAT для портов 80 и 443, то есть http и https. Вы можете добавить другие порты. Если вы хотите, чтобы DNS разрешался по тому же пути, вам нужно добавить для него правило и т. Д.

Если вы хотите перенаправить весь трафик через этот интерфейс, вы можете просто использовать:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source 192.168.0.2

EDIT: добавлена ​​информация, отражающая обновленные вопрос:

Эти строки из вашего вопроса должны заставить клиентские устройства маршрутизировать трафик http / https на другой шлюз:

sudo ip rule add fwmark 2 table 3
sudo ip route add default via 10.8.0.42 table 3
sudo ip route flush cache
sudo iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 2

РЕДАКТИРОВАТЬ: Маршрутизацию на клиентском устройстве можно обработать с помощью инструкций, приведенных в этом ответе: https : //unix.stackexchange.com/questions/21093/output-traffic-on-different-interfaces-based-on-destination-port#21118

В основном это то же самое, что и в вашем вопросе, за исключением последнего DNAT правило, которое не нужно.

1
ответ дан 3 December 2019 в 12:38

Правило sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination 10.8.0.42 перенаправит весь трафик http до 10.8.0.42 (имеет пункт назначения), а не через 10.8.0.42 (маршрутизация в). Как видно из tcpdump, сервер 10.8.0.42 не принимает соединения через порт 80.

Вы можете удалить это правило.

0
ответ дан 3 December 2019 в 12:38

Теги

Похожие вопросы