Как сделать так, чтобы моя точка доступа отправляла трафик на , 192.168.1.0
а eth0
весь остальной трафик — через tun0
?
Я настроил точку доступа Raspberry Pi VPN. Она находится в той же подсети, что и все мои серверы, 192.168.1.0
и, как и серверы, подключена кабелем к моему модему/маршрутизатору. Затем Raspberry Pi имеет WIFI-модем ( wlan0
) для подключения клиентов, он управляет собственной подсетью 192.168.2.0
и использует iptables
правила для пересылки всего трафика от своих клиентов wlan0
через мое VPN-подключение ( tun0
).
Я подготовил это следующим образом:
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
sudo iptables -A FORWARD -i tun0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o tun0 -j ACCEPT
Моя проблема в том, что теперь клиент, подключенный по Wi-Fi к моей точке доступа, не может связаться с моими серверами. Как мне этого добиться?
| | ¦
| __________________|_______¦_________
| | Modem/Router/DCHP server |
| | 192.168.1.254 |
| |_________________________¦________|
| | ¦
| | ¦
| __________________¦_
| | 8-port switch ¦ |
| |_________________¦_|
| | | ¦
| | | -----------
| ____________________| |__________ ¦
| | eth0| ¦tun0
| __________________ ________________________
| | Server | | Pi VPN Access Point |
| | 192.168.1.79 | | eth0: 192.168.1.81 |
| |________________| | tun0: 10.X.X.X |
| | wlan0:192.168.2.1 |
| |______________________|
| |wlan0
| |
| __________|___________
| | Laptop |
| | wlan0: 192.168.2.2 |
| |____________________|
Более подробно я описал настройку своей точки доступа здесь:http://www.snabela.net/index.php/2013/11/raspberry-vpn-access-point/
Что мне нужно сделать, чтобы иметь возможность подключаться по ssh с ноутбука на сервер, пока весь интернет-трафик от клиентов точки доступа отправляется через VPN? Могу ли я добавить еще одно правило iptables?
Вывод ifconfig -a точек доступа:
eth0 Link encap:Ethernet HWaddr b8:28:eb:f1:77:93
inet addr:192.168.1.81 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:124292 errors:0 dropped:0 overruns:0 frame:0
TX packets:86097 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:136739836 (130.4 MiB) TX bytes:15199088 (14.4 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:60 errors:0 dropped:0 overruns:0 frame:0
TX packets:60 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:6200 (6.0 KiB) TX bytes:6200 (6.0 KiB)
mon.wlan0 Link encap:UNSPEC HWaddr F8-1B-67-20-B3-61-00-00-00-00-00-00-00-00-00-00
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4760 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:630721 (615.9 KiB) TX bytes:0 (0.0 B)
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.4.43.179 P-t-P:10.4.43.178 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:108875 errors:0 dropped:0 overruns:0 frame:0
TX packets:75807 errors:0 dropped:29 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:126611820 (120.7 MiB) TX bytes:6303503 (6.0 MiB)
wlan0 Link encap:Ethernet HWaddr f8:1b:67:20:b3:61
inet addr:192.168.2.1 Bcast:192.168.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:75019 errors:0 dropped:0 overruns:0 frame:0
TX packets:109376 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:7219164 (6.8 MiB) TX bytes:130045181 (124.0 MiB)
Вывод route -n точки доступа:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.4.43.178 128.0.0.0 UG 0 0 0 tun0
0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 eth0
10.4.0.1 10.4.43.178 255.255.255.255 UGH 0 0 0 tun0
10.4.43.178 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
95.211.191.34 192.168.1.254 255.255.255.255 UGH 0 0 0 eth0
128.0.0.0 10.4.43.178 128.0.0.0 UG 0 0 0 tun0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
решение1
Я рискну предположить и скажу, что ваша политика FORWARD по умолчанию — REJECT или DROP (проверьте с помощью iptables -L FORWARD
). Если это верно, то вся ваша проблема заключается в этой строке:
sudo iptables -A FORWARD -i wlan0 -o tun0 -j ACCEPT
Что он делает, так это ПРИНИМАЕТ для ПЕРЕСЫЛКИ все, что входит через wlan0
и будет выходить через tun0
. Что не соответствует пакету из 192.168.2.2
в 192.168.1.79
, потому что он будет выходить через eth0
.
Самый простой способ — удалить эту строку и заменить ее этими двумя, чтобы разрешить пересылку всего в любом направлении между вашими внутренними интерфейсами:
sudo iptables -A FORWARD -i wlan0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -j ACCEPT
Если вы просто хотите исключить свой сервер из VPN, добавьте -o wlan0
во вторую строку. Конечно, если вы хотите добавить больше, более строгие требования, такие как установление сеанса, которое должно идти в определенном направлении или что-то еще, эти правила нужно скорректировать. Получайте удовольствие и держите консоль под рукой. ;-)