LINUX.ORG.RU
ФорумAdmin

Настройка раздачи интернета через VPN без прокси

 gatway, , , ,


1

1

Доброго времени суток!

Есть компьютер под управлением Fedora 16 x86_64 (скоро перейду на 17). Дальше буду называть его клиент. Компьютер находится в локальной сети и доступ в интернет через прокси. Сетевой интерфейс eth0. Есть сервер под управлением CentOS 5.3 x86_64. Дальше буду называть его сервер. Сервер находится у провайдера и имеет прямой доступ в интернет. Сетевой интерфейс eth0.

Необходимо ходить в интернет с клиента через сервер, а не через прокси в локальной сети. При всем при этом также не помешало бы ходить по ресурсам локальной сети.

На сервере развернут OpenVPN и с клиентом установлена связь через VPN. IP сервера 10.8.0.1 интерфейс tun0. IP клиента 10.8.0.4 интерфейс tun0.

На сервере настроил маскарадинг: - добавил «net.ipv4.ip_forward = 1» и перезапустил сеть. - настроил iptables, вот файл «/etc/sysconfig/iptables»:

# Generated by iptables-save v1.4.7 on Wed Jun 20 15:25:22 2012
*nat
:PREROUTING ACCEPT [780:170741]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
COMMIT
# Completed on Wed Jun 20 15:25:22 2012
# Generated by iptables-save v1.4.7 on Wed Jun 20 15:25:22 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [42026:9681910]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p udp -m udp --dport 1194 -j ACCEPT
-A INPUT -p udp -m udp --sport 1194 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Wed Jun 20 15:25:22 2012
После этого я естественно перезагрузил iptables и прописал на клиенте «route add default tun0», но ничего у меня не вышло. Подскажите пожалуйста что я сделал не так и/или как можно сделать лучше. У сервера внешний IP статический и как я понимаю вместо маскарадинга можно и даже лучше в плане ресурсов истользовать SNAT. В общем буду очень благодарен за помощь. Статей в интернете перерыл много, но не получалось добиться желаемого результата.

Заранее спасибо большое за помощь!


Посмотри через tracepatch куда уходят пакеты от клиента. Может оно туда не приходит? C DNS на клиенте всё в порядке?

DALDON ★★★★★
()

но ничего у меня не вышло


что именно не вышло?

Подскажите пожалуйста что я сделал не так и/или как можно сделать лучше

Ты не дал достаточно информации и невнятно описал свои действия и результаты.
Ты можешь лучше, я верю в тебя
Начни с трассировки и вывода
ip a
ip r
ip r g 8.8.8.8

zolden ★★★★★
()
Ответ на: комментарий от DALDON

DNS я не трогал :( Вот я что-то сомневаться начал то, что только маскарадинг надо, может еще что надо прописать или в iptables открыть # tracepath 8.8.8.8 1: clientcomp 0.103ms pmtu 1500 1: no reply 2: no reply 3: no reply 4: no reply 5: no reply ^C

MakPol
() автор топика
Ответ на: комментарий от zolden

Да, описал плохо. Просто не знал с чего начать, да и раньше не настраивал маскарадинг. Спасибо большое за то, что помогаете и помогаете предоставить информацию. Вот выводы IP:

[root@client client]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 70:71:bc:7c:b9:6c brd ff:ff:ff:ff:ff:ff
    inet 10.1.8.23/23 brd 10.1.8.255 scope global eth0
    inet6 fe80::7271:bcff:fe7c:b96c/64 scope link 
       valid_lft forever preferred_lft forever
3: ra0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether f0:7d:68:11:b8:4a brd ff:ff:ff:ff:ff:ff
5: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 
    link/ether 52:54:00:94:fa:9d brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
6: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master virbr0 state DOWN qlen 500
    link/ether 52:54:00:94:fa:9d brd ff:ff:ff:ff:ff:ff
12: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
    link/none 
    inet 10.8.0.4 peer 10.8.0.3/32 scope global tun0
[root@client client]# ip r
default via 10.1.8.249 dev eth0  proto static 
10.1.4.0/23 dev eth0  proto kernel  scope link  src 10.1.8.23  metric 1 
10.2.1.0/24 via 10.1.4.48 dev eth0  proto static 
10.3.0.0/22 via 10.1.8.249 dev eth0  proto static 
10.8.0.1 via 10.8.0.3 dev tun0 
10.8.0.3 dev tun0  proto kernel  scope link  src 10.8.0.4 
10.44.0.0/24 via 10.1.8.182 dev eth0  proto static 
10.254.254.0/24 via 10.1.8.249 dev eth0  proto static 
192.168.0.0/24 via 10.1.8.182 dev eth0  proto static 
192.168.122.0/24 dev virbr0  proto kernel  scope link  src 192.168.122.1 
[root@client client]# ip r g 8.8.8.8
8.8.8.8 via 10.1.8.249 dev eth0  src 10.1.8.23 
    cache  expires 450sec ipid 0x3345

MakPol
() автор топика
Ответ на: комментарий от zolden

Я очень сомневаюсь в правильности того, что у меня в /etc/sysconfig/iptables что-то где-то закрыл или не открыл или что-то в этом роде, но где...

И еще одна вещь мне не понятна и скажем так пугает меня: еогда я прописываю маскарадинг на интерфейс(е) eth0 не смогул ли злоумышленники, знающие мой статический IP в сети интернет воспользоваться моим сервером как шлюзом и сидеть через него в интернете (аля анонимный прокси)?

Заранее спасибо!

MakPol
() автор топика
Ответ на: комментарий от MakPol

у вас пакеты в мир уходят через eth0, а не через туннель ваш
так и должно быть?

zolden ★★★★★
()

OpenVPN-сервер умеет и маршруты, и днс-сервера раздавать клиентам.

push "dhcp-option DNS 8.8.8.8"
push "route 10.0.0.0 255.0.0.0"
unfo ★★★★★
()
Ответ на: комментарий от MakPol

Если default маршрут уже есть, то надо было делать «ip route replace ... tun0». Но, перед этим сделать маршрут до ip-адреса узла терминирования тунеля через eth0.

еогда я прописываю маскарадинг на интерфейс(е) eth0 не смогул ли злоумышленники ...

Практически нет, но лучше разрешить пакетам "-s 10.8.0.0/24" приходить только из tun-интерфейса.

mky ★★★★★
()
Ответ на: комментарий от mky

Если не сложно, то подскажите пожалуйста по шагам что я должен был сделать на сервере а что на клиенте. На сервере IP, смотрящий в интернет - статический. Заранее большое спасибо!

MakPol
() автор топика
Ответ на: комментарий от MakPol

Сначала нужно разобратся с default маршрутом на клиенте. Здесь и далее под SrvIP подразумевается ip-адрес, на котором слушает OpenVPN-сервер, куда подключается клиент. Делает команду:

ip route get  SrvIP

Если в выводе присутствует строка «via 10.1.8.249 dev eth0», то делает такой маршрут:

ip route add SrvIP via 10.1.8.249 dev eth0

После этого можно менять маршрут по умолчанию:

 ip route replace default via 10.8.0.3 dev tun0

На сервере в iptables разрешаете прохождение пакетов, добавляя в НАЧАЛО цепочки FORWARD:

-A FORWARD -s 10.8.0.0/24 -j ACCEPT
-A FORWARD -d 10.8.0.0/24 -j ACCEPT

Можно и не 10.8.0.0/24, а 10.8.0.3 и в FORWARD и в POSTROUTING.

Далее проверяете что маршрутизация работает командами «ping -n» и «traceroute -I -n» до какого-либо ip-адреса в Интеренте, допустим 8.8.8.8.

mky ★★★★★
()
Ответ на: комментарий от mky

А почему 10.8.0.3? Попробовал но ничего не выходит. Где-то я похоже окончательно запутался и/или затупил :( Да еще такая штука... Раньше устанавливал соединение через «openvpn /etc/openvpn/client.conf &» и нормально пинговал сервак 10.8.0.1, а сейчас сделал через network manager и теперь соединение устанавливается но ни клиент не пингуется с сервера ни сервер с клиента :( только сами себя....

MakPol
() автор топика
Ответ на: комментарий от MakPol

Ошибся, 10.8.0.4, ip-адрес на интерфейсе с default-маршрутом.

Я network manager не знаю, никогда не использовал и не советую. Можно, конечно, поразбиратся, почему не пингуется, может маршруты не прописались, а может соединение криво установилось и только видимость, что есть tun0, а на самом деле пакеты через него не ходят. Если с обоих сторон запустить tcpdump или wireshark на tun0 и при пинге смотреть, есть пакеты или нет то будет понятнее.

mky ★★★★★
()
Ответ на: комментарий от mky

А шлюзом по идее ведь у меня должен быть 10.8.0.1? Ведь там сервер и там доступ в интеренет. Вот думаю как предоставить наглядно то, что я понастраивал :( и главное оперативно.

Вот что у мня на серваке 10.8.0.1 (с доступом в инет через eth0) в iptables:

# Generated by iptables-save v1.4.7 on Wed Jun 20 15:25:22 2012
*nat
:PREROUTING ACCEPT [780:170741]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
COMMIT
# Completed on Wed Jun 20 15:25:22 2012
# Generated by iptables-save v1.4.7 on Wed Jun 20 15:25:22 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [42026:9681910]
-A FORWARD -s 10.8.0.0/24 -j ACCEPT
-A FORWARD -d 10.8.0.0/24 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p udp -m udp --dport 1194 -j ACCEPT
-A INPUT -p udp -m udp --sport 1194 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Wed Jun 20 15:25:22 2012
Может я не туда FORWARD записал :(

MakPol
() автор топика
Ответ на: комментарий от MakPol

Посмотрите вывод «iptables -L -n -v», если в FORWARD есть ACCEPT правила до REJECT, то туда. Если у этих правил счётчики не нулевые, значит пакеты в Инет ходят.

Про 10.8.0.1 я вобще не знаю, откуда он у вас берётся, у вас на интерфейсе:

inet 10.8.0.4 peer 10.8.0.3/32 scope global tun0

поэтому и шлюзом должен быть 10.8.0.3, хотя для POINTOPOINT интерфейсов маршрут, фактически, прописывается в этот интерфейс и не важен ip-адрес шлюза.

У вас с клиента пингуется 10.8.0.3?

На сервере команда «sysctl net.ipv4.ip_forward» показывает «1»?

mky ★★★★★
()
Ответ на: комментарий от mky

Что на сервере, что на клиенте:

# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
С клиента 10.8.0.3 не пингуется, я не понимаю почему он должен пинговаться, если честно. Также как и не понимаю зачем в настройках для клиента OpenVPN указывается что-то типа:
ifconfig-push 10.8.0.4 10.8.0.3
ну или само выдается также, или
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.8.0.6  P-t-P:10.8.0.5  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:2 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:168 (168.0 b)  TX bytes:504 (504.0 b)
А вот то что выводит iptables на сервере:
# iptables -L -n -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
30305 7810K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
   28  1439 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
    1    44 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    2   120 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
   10   500 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80 
   11   632 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:21 
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpts:50000:50100 
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:8180 
    5   210 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp dpt:1194 
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp spt:1194 
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:1194 
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:1194 
77271   31M REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination                                   
    8   672 ACCEPT     all  --  *      *       10.8.0.0/24          0.0.0.0/0                                     
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            10.8.0.0/24         
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT 30733 packets, 7887K bytes)
 pkts bytes target     prot opt in     out     source               destination

MakPol
() автор топика
Ответ на: комментарий от MakPol

Клиенту выдаются разные адреса или на интерфейсе разные адреса с разных сторон тунеля? Или что значит:

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.8.0.6  P-t-P:10.8.0.5  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
Хотя до этого было:
12: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
    link/none 
    inet 10.8.0.4 peer 10.8.0.3/32 scope global tun0

зачем в настройках для клиента OpenVPN указывается что-то типа «ifconfig-push 10.8.0.4 10.8.0.3»

Вы меня спрашиваете, зачем вы указали эту опцию конфига?

mky ★★★★★
()
Ответ на: комментарий от mky

Разные адреса т.к. я использовал разные варианты настроек. где 10.8.0.6 это без отдельных конфигураций клиента openvpn, где 10.8.0.4 это с конфигурацией ifconfig-push 10.8.0.4 10.8.0.3

MakPol
() автор топика
Ответ на: комментарий от MakPol

В общем разобрался, т.к. у меня OpenVPN настроен как tun, то я должен был шлюзом указывать не 10.8.0.1, а 10.8.0.3 ip для ip 10.8.0.4 и/или 10.8.0.5 для 10.8.0.6 соответственно :)

Всем огромное спасибо!!!

MakPol
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.