Поднимаю VPN на тестовом стенде с импользованием OpenVPN на железе из роутера-клиента (DD-WRT) и ПК-сервера. В качестве метода для OpenVPN был выбран статический ключ (чтобы не мучаться с генерацией сертификатов и упростить процесс до максимума). Использовал материалы отсюда: http://spvd.ru/page/ddwrt-openvpn-static
Локальная сеть роутера имеет адреса 192.168.11.XXX, пусть IP тестового ПК будет 169.254.0.4. В тунеле адреса сервера и роутера будут 10.0.1.1 и 10.0.1.2 соответственно. Сначала тестировал просто включив WAN роутера в сеть с моим ПК (DHCP выдал роутеру IP из сети 169.254.X.X), но не взлетело.
Конфиг роутера (клиент):
# Startup скрипт
cd /tmp
echo "remote 169.254.0.4
proto udp
port 1194
dev tun0
secret /tmp/key
verb 3
comp-lzo
keepalive 15 60
daemon" > client.conf
echo "
-----BEGIN OpenVPN Static key V1-----
...
-----END OpenVPN Static key V1-----
" > key
ln -s /usr/sbin/openvpn /tmp/myvpn
/tmp/myvpn --mktun --dev tun0
ifconfig tun0 10.0.1.2 netmask 255.255.255.0 promisc up
route add -net 169.254.0.0 netmask 255.255.0.0 gw 10.0.1.1
sleep 5
/tmp/myvpn --config client.conf
# Firewall
iptables -I INPUT 2 -p udp --dport 1194 -j ACCEPT
iptables -I FORWARD -i br0 -o tun0 -j ACCEPT
iptables -I FORWARD -i tun0 -o br0 -j ACCEPT
Подумал, что роутер и ПК должны быть в разных подсетях, и сменил настройку WAN роутера на статику 169.0.0.123 (255.0.0.0) - не взлетело. Вернул настройку роутера в DHCP и успешно пропинговал из роутера ПК-сервер: ping -I vlan2 169.254.0.4. На ПК выполнил следующее:
# cd /tmp
# echo "proto udp
port 1194
dev tun0
secret /tmp/key
verb 3
comp-lzo
keepalive 15 60
daemon" > server.conf
# echo "
-----BEGIN OpenVPN Static key V1-----
...
-----END OpenVPN Static key V1-----
" > key
# ln -s /usr/sbin/openvpn /tmp/myvpn
# /tmp/myvpn --mktun --dev tun0
Mon Oct 14 10:54:37 2013 TUN/TAP device tun0 opened
Mon Oct 14 10:54:37 2013 Persist state set to: ON
# ifconfig tun0 10.0.1.1 netmask 255.255.255.0 promisc up
# route add -net 192.168.11.0 netmask 255.255.255.0 gw 10.0.1.2
# iptables -I INPUT 2 -p udp --dport 1194 -j ACCEPT
iptables: Index of insertion too big.
# iptables -I FORWARD -i eth0 -o tun0 -j ACCEPT
# iptables -I FORWARD -i tun0 -o eth0 -j ACCEPT
# /tmp/myvpn --config server.conf
# arping 169.254.0.123 (это ip роутрета-клиента в сети)
ARPING 169.254.0.123 from 169.254.0.4 eth0
Unicast reply from 169.254.0.123 [**:**:**:**:**:**] 0.711ms
Unicast reply from 169.254.0.123 [**:**:**:**:**:**] 0.635ms
Unicast reply from 169.254.0.123 [**:**:**:**:**:**] 0.652ms
Unicast reply from 169.254.0.123 [**:**:**:**:**:**] 0.647ms
Unicast reply from 169.254.0.123 [**:**:**:**:**:**] 0.619ms
^CSent 5 probes (1 broadcast(s))
Received 5 response(s)
# ping -I tun0 192.168.11.58 (ПК за роутером с ХР)
PING 192.168.11.58 (192.168.11.58) from 10.0.1.1 tun0: 56(84) bytes of data.
^C
--- 192.168.11.58 ping statistics ---
10 packets transmitted, 0 received, 100% packet loss, time 9026ms
# ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.0.1.1 P-t-P:10.0.1.1 Mask:255.255.255.0
UP POINTOPOINT RUNNING NOARP PROMISC MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:840 (840.0 B)
# ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.0.1.2 P-t-P:10.0.1.2 Mask:255.255.255.0
UP POINTOPOINT RUNNING NOARP PROMISC MULTICAST MTU:1500 Metric:1
RX packets:944496 errors:0 dropped:914951 overruns:0 frame:0
TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:1394235014 (1.2 GiB)
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination