В вашем примере показано устройство tun
, поэтому мы должны использовать исключительно маршрутизацию. Я использую Raspbian Stretch Lite 2018-04-18. Идея состоит в том, чтобы настроить статическую минимальную конфигурацию без каких-либо дополнительных действий, например, с использованием dhcp server
или чего-то подобного. Если маршрутизация работает, она может быть расширена шаг за шагом.
Стандартные сети на Raspbian часто путают с более сложными настройками [1]. Поэтому я использую systemd-networkd
который предназначен для настройки сервера. Поскольку мне сложно угадать все ip-адреса ваших интерфейсов, я настроил свой тест с этими ip-адресами:
10.10.10.2 +----------+ 10.10.10.1
/ vpn-tunnel | | \
(tun0) =============\\ //======================> VPN-SERVER
PHONE ~.~.~.~.~.~> (wlan0)RPI(eth0) ------------> ROUTER ---> | INTERNET |
\ wifi / \ ethernet / wan | |
192.168.1.2 192.168.1.1 192.168.0.2 192.168.0.1 +----------+
Другая проблема для меня заключается в том, что у меня нет концентратора VPN cisco3000, поэтому я не могу использовать vpnc
. Вместо этого я использовал openvpn
но он должен делать то же самое в маршрутизации. Но настройка инфраструктуры openvpn
здесь выходит за рамки.
Вы можете посмотреть, как перейти от сети к systemd-networkd, если хотите использовать это, но вам нужно только использовать шаги с 1 по 3 с этими файлами:
rpi ~$ sudo cat >/etc/systemd/network/04-eth.network <<EOF
[Match]
Name=e*
[Network]
Address=192.168.0.2/24
Gateway=192.168.0.1
EOF
rpi ~$ sudo cat >/etc/systemd/network/08-wifi.network <<EOF
[Match]
Name=wl*
[Network]
Address=192.168.1.1/24
IPForward=yes
EOF
ip forwarding
имеет важное значение.
Не wpa_supplicant
. Вместо этого установите hostapd
[2]:
rpi ~$ sudo -Es
rpi ~# systemctl disable wpa_supplicant.service
rpi ~# apt update
rpi ~# apt full-upgrade
rpi ~# apt install hostapd
rpi ~# systemctl stop hostapd.service
Настройте программное обеспечение хоста точки доступа (hostapd) с помощью этого файла:
rpi ~# cat >/etc/hostapd/hostapd.conf <<EOF
interface=wlan0
driver=nl80211
ssid=MyTestAP
hw_mode=g
channel=6
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=VerySecretPw
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
EOF
rpi ~# chmod 600 /etc/hostapd/hostapd.conf
Установите DAEMON_CONF = "/etc/hostapd/hostapd.conf" в /etc/default /hostapd с помощью:
rpi ~# sed -i 's/^#DAEMON_CONF=.*$/DAEMON_CONF="\/etc\/hostapd\/hostapd.conf"/' /etc/default/hostapd
rpi ~# systemctl reboot
Затем вы должны установить статический маршрут в вашем интернет-роутере, чтобы он мог найти маршрут через распи к вашему мобильному телефону. На большинстве интернет-роутеров вы можете установить статический маршрут, но как это сделать, зависит от модели. Это зависит от вас, чтобы выяснить это. На Raspberry Pi это будет выглядеть так (не устанавливайте его на роутере Raspi!)
rpi ~$ sudo ip route add 192.168.1.0/24 via 192.168.0.2 dev ethX
Это означает, что для интернет-маршрутизатора: «отправьте все пакеты, принадлежащие подсети 192.168.1.0/24
(сеть назначения), следующему маршрутизатору в моей подсети, вашему raspi-router 192.168.0.2
(шлюз). Он знает, куда идти ».
Если у вас нет доступа к интернет-роутеру, вы можете подделать его с помощью nat
чтобы лгать, что все пакеты приходят от вашего raspi. Установите это на своем Raspberry Pi:
rpi ~$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Но это должен быть только второй вариант, потому что он не является чистой маршрутизацией, имеет ограничения и может сбивать с толку.
Если вы сейчас подключаете свой мобильный телефон к MyTestAP, настройте его на статический IP-адрес 192.168.1.2, шлюз 192.168.1.1. Тогда вы сможете подключиться к Интернету.
Настройка:
rpi ~$ ip addr # stripped to relevant information
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.0.2/24 brd 192.168.0.255 scope global eth0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.1.1/24 brd 192.168.1.255 scope global wlan0
rpi ~$ ip route
default via 192.168.0.1 dev eth0 proto static
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.2
192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.1
Теперь я устанавливаю соединение VPN, например, с:
rpi ~$ sudo openvpn myVpn.conf
Настройка тогда:
rpi ~$ ip addr # stripped to relevant information
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.0.2/24 brd 192.168.0.255 scope global eth0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.1.1/24 brd 192.168.1.255 scope global wlan0
11: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/none
inet 10.10.10.2 peer 10.10.10.1/32 scope global tun0
rpi ~$ ip route
default via 192.168.0.1 dev eth0 proto static
10.0.0.0/8 via 10.10.10.1 dev tun0
10.10.10.1 dev tun0 proto kernel scope link src 10.10.10.2
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.2
192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.1
Здесь мы также должны установить статические маршруты на удаленном сервере vpn, но я думаю, что у нас нет никаких шансов сделать это. Так что мы можем только подделать сервер с nat
. На распи множество:
rpi ~$ sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
Теперь я мог всегда подключаться к Интернету через мобильный телефон через Wi-Fi, но только в сеть VPN, если было установлено его соединение.
Рекомендации:
[1] dhcpcd vs /etc /network /interfaces
[2] Настройка Raspberry Pi в качестве точки доступа