Я использую Ubuntu 18.04 LTS на AWS и пытаюсь настроить раздельное туннелирование с помощью коммерческого VPN (PIA).
Я не могу использовать их конфигурацию .opvn из коробки, потому что, когда я это делаю, мое SSH-соединение разрывается, и мне нужно перезапустить сервер, чтобы вернуться, поэтому я добавил pull-filter ignore redirect-gateway
(что является современной версией route-nopull
).
Мой файл .opvn (NYC.opvn) содержит следующее:
client
dev tun
proto udp
remote us-newyorkcity.privateinternetaccess.com 1198
resolv-retry infinite
nobind
persist-key
persist-tun
cipher aes-128-cbc
auth sha1
tls-client
remote-cert-tls server
pull-filter ignore redirect-gateway
auth-user-pass login.conf
compress
verb 1
reneg-sec 0
Я начинаю туннель с sudo openvpn NYC.opvn
и получите это:
Wed Nov 20 17:34:52 2019 OpenVPN 2.4.4 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on May 14 2019
Wed Nov 20 17:34:52 2019 library versions: OpenSSL 1.1.1d 10 Sep 2019, LZO 2.08
Wed Nov 20 17:34:52 2019 TCP/UDP: Preserving recently used remote address: [AF_INET]209.95.50.11:1198
Wed Nov 20 17:34:52 2019 UDP link local: (not bound)
Wed Nov 20 17:34:52 2019 UDP link remote: [AF_INET]209.95.50.11:1198
Wed Nov 20 17:34:52 2019 [8d26667dabcc2a9cc7b10009813a306a] Peer Connection Initiated with [AF_INET]209.95.50.11:1198
Wed Nov 20 17:34:53 2019 TUN/TAP device tun0 opened
Wed Nov 20 17:34:53 2019 do_ifconfig, tt->did_ifconfig_ipv6_setup=0
Wed Nov 20 17:34:53 2019 /sbin/ip link set dev tun0 up mtu 1500
Wed Nov 20 17:34:53 2019 /sbin/ip addr add dev tun0 local 10.43.11.6 peer 10.43.11.5
Wed Nov 20 17:34:53 2019 Initialization Sequence Completed
Однако у меня нет доступа в Интернет на tun0:
curl --interface tun0 -v ipinfo.io
* Rebuilt URL to: ipinfo.io/
* Trying 216.239.38.21...
* TCP_NODELAY set
* Local Interface tun0 is ip 10.43.11.6 using address family 2
* Local port: 0
и просто зависает (curl --interface ens5 -v ipinfo.io
работает отлично).
О сети (после запуска VPN):
route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.31.32.1 0.0.0.0 UG 100 0 0 ens5
10.43.11.1 10.43.11.5 255.255.255.255 UGH 0 0 0 tun0
10.43.11.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
172.31.32.0 0.0.0.0 255.255.240.0 U 0 0 0 ens5
172.31.32.1 0.0.0.0 255.255.255.255 UH 100 0 0 ens5
ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
link/ether 0e:a7:57:4c:36:ab brd ff:ff:ff:ff:ff:ff
inet 172.31.47.214/20 brd 172.31.47.255 scope global dynamic ens5
valid_lft 3359sec preferred_lft 3359sec
inet6 fe80::ca7:57ff:fe4c:36ab/64 scope link
valid_lft forever preferred_lft forever
19: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
link/none
inet 10.43.11.6 peer 10.43.11.5/32 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::2444:7d65:81eb:af01/64 scope link stable-privacy
valid_lft forever preferred_lft forever
Как мне заставить интернет работать на tun0, чтобы я мог использовать его с cURL?
Большое спасибо
РЕДАКТИРОВАТЬ
Сетевой администратор сказал мне, что я должен сделать следующее:
Так я и сделал:
(примечание: IP-адреса tun0 изменились с момента первоначальной публикации и теперь inet 10.55.10.6 netmask 255.255.255.255 destination 10.55.10.5
)
echo "1000 vpn" >> /etc/iproute2/rt_tables
ip route add default via 10.55.10.5 dev tun0 table vpn
ip rule add iif tun0 lookup vpn
ip route add 255.255.255.255 dev tun0 proto kernel src 10.55.10.6 table vpn
К сожалению, cURL все еще зависает:
curl -v --interface tun0 http://ipinfo.io
* Rebuilt URL to: http://ipinfo.io/
* Trying 216.239.36.21...
* TCP_NODELAY set
* Local Interface tun0 is ip 10.55.10.6 using address family 2
* Local port: 0
Вот еще данные для отладки:
ubuntu@ip-172-31-47-214:~$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.31.32.1 0.0.0.0 UG 100 0 0 ens5
10.55.10.1 10.55.10.5 255.255.255.255 UGH 0 0 0 tun0
10.55.10.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
172.31.32.0 0.0.0.0 255.255.240.0 U 0 0 0 ens5
172.31.32.1 0.0.0.0 255.255.255.255 UH 100 0 0 ens5
ubuntu@ip-172-31-47-214:~$ ifconfig
ens5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9001
inet 172.31.47.214 netmask 255.255.240.0 broadcast 172.31.47.255
inet6 fe80::ca7:57ff:fe4c:36ab prefixlen 64 scopeid 0x20<link>
ether 0e:a7:57:4c:36:ab txqueuelen 1000 (Ethernet)
RX packets 1188 bytes 117537 (117.5 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 841 bytes 109924 (109.9 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 168 bytes 13034 (13.0 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 168 bytes 13034 (13.0 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 10.55.10.6 netmask 255.255.255.255 destination 10.55.10.5
inet6 fe80::28a:e5f2:9cdf:b63 prefixlen 64 scopeid 0x20<link>
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (UNSPEC)
RX packets 10 bytes 600 (600.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 13 bytes 684 (684.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ubuntu@ip-172-31-47-214:~$ ip rule show
0: from all lookup local
32765: from all iif tun0 lookup vpn
32766: from all lookup main
32767: from all lookup default
Ваш IP-адрес на этом компьютере является «частным IP-адресом». маршрут по умолчанию «Назначение: 0.0.0.0» также использует «частный IP-адрес». и ваш VPN использует другой «частный IP-адрес».
разница, вероятно, в том, что ваш маршрут по умолчанию, который находится на Ens5, использует технологию, аналогичную NAT который переводит этот «частный IP-адрес» в «общедоступный IP-адрес».
когда вы используете tun0 устройство, которое вы собираетесь на сервер, которое не реализует NAT.
Итак, если у вас есть корень доступ к машине то есть "10.43.11.1" вы можете настроить NAT там, и он тоже преобразует «частный IP-адрес» в «общедоступный IP-адрес».
Надеюсь это поможет.
если нет, пожалуйста, задавайте вопросы.
man ip-rule
: "…
oif NAME - выберите исходящее устройство для соответствия. Исходящий интерфейс доступен только для пакетов, исходящих из локальных сокетов, привязанных к устройству..
… »
Следовательно, вместо ip rule add iif tun0 lookup vpn
вы должны использовать:
ip rule add oif tun0 lookup vpn
Но на самом деле это не сработает потому что выходной интерфейс будет выбран первичной таблицей маршрутов перед. Итак, единственный возможный вариант - использовать ip rule
на основе исходного IP. Для е. g., если вы уверены, что IP-адрес VPN останется в сети 10/8
так как 10.43.11.6
неужели это было бы так же просто, как
ip rule add from 10.0.0.0/8 lookup vpn