Я пытаюсь создать VPN-туннель, который пересылает все данные с локального компьютера на VPN-сервер. Я использую для этого ppp-2.4.5 со следующей конфигурацией:
pty "pptp <VPNServer> --nolaunchpppd"
name <my login name>
remotename PPTP
usepeerdns
require-mppe-128
file /etc/ppp/options.pptp
persist
maxfail 0
holdoff 5
У меня есть скрипт в if-up.d со следующим содержанием:
route del default eth0
route add default dev ppp0
Перед запуском VPN-туннеля моя маршрутизация выглядит так:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 2 0 0 eth0
127.0.0.0 127.0.0.1 255.0.0.0 UG 0 0 0 lo
192.168.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
После запуска туннеля (через pon) это выглядит так:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 ppp0
12.34.56.1 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
127.0.0.0 127.0.0.1 255.0.0.0 UG 0 0 0 lo
192.168.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
Теперь проблема в том, что туннель VPN кажется замкнутым сам в себе. Если я запустил ifconfig через несколько секунд без трафика:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.10 netmask 255.255.0.0 broadcast 192.168.255.255
ether 00:01:2e:2f:ff:35 txqueuelen 1000 (Ethernet)
RX packets 39931 bytes 6784614 (6.4 MiB)
RX errors 0 dropped 90 overruns 0 frame 0
TX packets 34980 bytes 7633181 (7.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 20 memory 0xfbdc0000-fbde0000
ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1496
inet 12.34.56.78 netmask 255.255.255.255 destination 12.34.56.1
ppp txqueuelen 3 (Point-to-Point Protocol)
RX packets 7 bytes 94 (94.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 782863 bytes 349257986 (333.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
В нем говорится, что уже было отправлено более 300 МБ, ppp0 находится в сети всего несколько секунд, и соединение все равно не работает.
Может ли кто-нибудь помочь мне исправить таблицу маршрутизации, чтобы трафик от ppp0 не отправлялся снова через ppp0, а вместо этого шел на удаленный сервер?
Я наконец решил это, создав следующий маршрут:
route add -host <VPNServer> gw 192.168.0.1
route add -net default gw 12.34.56.1
поэтому единственное, что было не так, я перепутал конечную точку VPN-соединения с IP-адресом самого VPN-сервера.
Просто с точки зрения сети вам все равно понадобится выход из eth0 для определенного IP-адреса для VPN-сервера (его внешний IP-адрес).
Вы можете добавить для этого маршрут в сценарий запуска или сценарий if-up. Не имеет значения, существует ли он, если маршрут по умолчанию уже существует, выходя из eth0.
Все остальные данные должны затем передаваться через ppp0 (который затем выводится через eth0 ..)