Birisi bir cisco VPN üzerindeki her şey için VPN yönlendirmesini zorlamak için yönlendirme masasını (mac'ta) hacklemeyi bilir? Yapmak istediğim hemen hemen sadece VPN üzerinden 10.121. * ve 10.122.
Birisi bir cisco VPN üzerindeki her şey için VPN yönlendirmesini zorlamak için yönlendirme masasını (mac'ta) hacklemeyi bilir? Yapmak istediğim hemen hemen sadece VPN üzerinden 10.121. * ve 10.122.
Yanıtlar:
Aşağıdaki benim için çalışıyor. Bunları Cisco VPN'e bağlandıktan sonra çalıştırın. (Cisco markalı istemciyi değil, OS X'in yerleşik Cisco istemcisini kullanıyorum.)
sudo route -nv add -net 10 -interface utun0
sudo route change default 192.168.0.1
10
İlk komutta, tünelin diğer tarafında bulunan ağla değiştirin .
192.168.0.1
Yerel ağınızın ağ geçidi ile değiştirin .
Böyle bir bash betiğine koydum:
$ cat vpn.sh
#!/bin/bash
if [[ $EUID -ne 0 ]]; then
echo "Run this as root"
exit 1
fi
route -nv add -net 10 -interface utun0
route change default 192.168.0.1
Ayrıca VPN'i bağladığınızda bunun otomatik olarak nasıl çalıştırılacağına dair bir açıklama buldum , ancak Cuma günü geç oldu ve denemek istemiyorum :)
O zamandan beri Cisco VPN kullandığım işi bıraktım, bu yüzden bu bellekten geliyor.
10
İlk komuta VPN üzerinden rota istediğiniz ağdır. 10
için kısa el 10.0.0.0/8
. In Tuan Anh Tran durumda, ağıdır gibi görünüyor 192.168.5.0/24
.
İkinci komutta hangi ağ geçidinin belirtileceğine gelince, yerel ağ geçidiniz olmalıdır. Bölünmüş tüneli engelleyen bir VPN'de oturum açtığınızda, tüm tabloların sanal arabirimde yönlendirilmesi için yönlendirme tablolarınızı değiştirerek bu politikayı zorlar. Bu nedenle, varsayılan rotanızı VPN'e geçmeden önceki haline değiştirmek istiyorsunuz .
Ağ geçidini anlamanın en kolay yolu netstat -rn
, VPN'de oturum açmadan önce çalıştırmak ve "varsayılan" hedefin sağındaki IP adresine bakmaktır. Örneğin, şu an benim kutumda göründüğü gibi:
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 10.0.1.1 UGSc 29 0 en1
10.0.1/24 link#5 UCS 3 0 en1
10.0.1.1 0:1e:52:xx:xx:xx UHLWIi 55 520896 en1 481
10.0.1.51 7c:c5:37:xx:xx:xx UHLWIi 0 1083 en1 350
10.0.1.52 127.0.0.1 UHS 0 0 lo0
Ağ geçidim 10.0.1.1
- "varsayılan" hedefin sağında.
Mehaase'den gelen bilgileri kullanarak, Mac'te bu işlemi gerçekten kolaylaştıran bir Python betiği yazdım. Çalıştırdığınızda, komut dosyası güvenlik duvarı bilgilerinizi kaydedecek, AnyConnect istemcisini başlatacak, giriş yapmayı bekleyecek, ardından yolları ve güvenlik duvarını düzeltecektir. Sadece betiği 'terminal' den çalıştırın.
#!/usr/bin/python
# The Cisco AnyConnect VPN Client is often configured on the server to block
# all other Internet traffic. So you can be on the VPN <b>OR</b> you can have
# access to Google, etc.
#
# This script will fix that problem by repairing your routing table and
# firewall after you connect.
#
# The script does require admin (super user) access. If you are prompted for
# a password at the start of the script, just enter your normal Mac login
# password.
#
# The only thing you should need to configure is the vpn_ip_network.
# Mine is 10.x.x.x so I just specify '10' but you could be more specific
# and use something like '172.16'
vpn_ip_network = '10'
import sys
import subprocess
def output_of(cmd):
lines = subprocess.Popen(cmd if isinstance(cmd, list) else cmd.split(' '), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).communicate()[0]
try:
lines = lines.decode('utf-8')
except Exception:
pass
return [line.strip() for line in lines.strip().split('\n')]
sys.stdout.write("Mac Account Login ")
good_firewall_ids = set([line.partition(' ')[0] for line in output_of('sudo ipfw -a list')])
sys.stdout.write('Firewall Saved.\n')
gateway = None
for line in output_of('route get default'):
name, delim, value = line.partition(':')
if name == 'gateway':
gateway = value.strip()
p = subprocess.Popen(['/Applications/Cisco/Cisco AnyConnect VPN Client.app/Contents/MacOS/Cisco AnyConnect VPN Client'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
was_disconnected = False
while True:
line = p.stdout.readline()
if line == '' or p.poll():
sys.stdout.write("Never connected!\n")
break
try:
line = line.decode('utf-8')
except Exception:
pass
if 'Disconnected' in line:
sys.stdout.write('Waiting for you to enter your VPN password in the VPN client...\n')
was_disconnected = True
if 'Connected' in line:
if was_disconnected:
subprocess.Popen(['sudo','route','-nv','add','-net',vpn_ip_network,'-interface','utun0'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT).wait()
subprocess.Popen(['sudo','route','change','default',gateway], stdout=subprocess.PIPE, stderr=subprocess.STDOUT).wait()
unfriendly_firewall_ids = list(set([line.partition(' ')[0] for line in output_of('sudo ipfw -a list')])-good_firewall_ids)
extra = ''
if unfriendly_firewall_ids:
subprocess.Popen('sudo ipfw delete'.split(' ') + unfriendly_firewall_ids, stdout=subprocess.PIPE, stderr=subprocess.STDOUT).wait()
sys.stdout.write("VPN connection established, routing table repaired and %d unfriendly firewall rules removed!\n" % len(unfriendly_firewall_ids))
else:
sys.stdout.write("VPN connection established and routing table repaired!\n")
else:
try:
subprocess.Popen.kill(p)
sys.stdout.write('VPN was already connected. Extra VPN client closed automatically.\n')
except Exception:
sys.stdout.write('VPN was already connected. Please close the extra VPN client.\n')
break
break
else:
sys.stdout.write("Couldn't get gateway. :-(\n")
Bu önceki cevabın içindeki Python betiği yardımcı oldu, ancak AnyConnect'in cihazdaki diğer arayüzleri (VMware arayüzleri gibi) devralmak için kullandığı rotaları dikkate almadı. Ayrıca birden fazla VPN ağını da kullanamadı.
İşte kullandığım komut dosyası:
#!/bin/bash
HOME_NETWORK=192.168
HOME_GATEWAY=192.168.210.1
WORK_NETWORKS="X.X.X.X/12 10.0.0.0/8 X.X.X.X/16"
# What should the DNS servers be set to?
DNS_SERVERS="10.192.2.45 10.216.2.51 8.8.8.8"
##
## Do not edit below this line if you do not know what you are doing.
##
function valid_ip()
{
local ip=$1
local stat=1
if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
OIFS=$IFS
IFS='.'
ip=($ip)
IFS=$OIFS
[[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \
&& ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]
stat=$?
fi
return $stat
}
# Nuke any DENY firewall rules
for RULE in `sudo ipfw list | grep deny | awk '{print $1}' | xargs`; do sudo ipfw delete $RULE; done
# Delete any routes for the home network that Anyconnect might have made
sudo route delete -net ${HOME_NETWORK}
sudo route add -net ${HOME_NETWORK} ${HOME_GATEWAY}
# Get the AnyConnect interface
ANYCONNECT_INTERFACE=`route get 0.0.0.0 | grep interface | awk '{print $2}'`
# Add the work routes
for NETWORK in ${WORK_NETWORKS}; do
sudo route -nv add -net ${NETWORK} -interface ${ANYCONNECT_INTERFACE}
done
# Set the default gateway
sudo route change default ${HOME_GATEWAY}
# Mass route changes
for NET in `netstat -nr | grep -e ^${HOME_NETWORK} | grep utun1 | awk '{print $1}' | xargs`; do
if valid_ip ${NET}; then
echo "Changing route for network"
sudo route change ${NET} ${HOME_GATEWAY}
else
echo "Changing route for host"
sudo route change -net ${NET} ${HOME_GATEWAY}
fi
done
# Set the nameservers
sudo scutil << EOF
open
d.init
d.add ServerAddresses * ${DNS_SERVERS}
set State:/Network/Service/com.cisco.anyconnect/DNS
quit
EOF
Büyük olasılıkla yöneticiniz, 10.121. * Ve 10.122. * Alt ağları için yerel yönlendirmeyi kullanmak için VPN bağlantılarını ayarlamak ve uzaktan kumandanın (ev makinenizin) tüm istekleri yönlendirmesine izin vermek zorundadır. (onlara bant genişliği ve sorumluluk kazandırır)
Cisco'nun "VPN İstemcisi" kullanıyor musunuz? os OS X?
Eğer OS X’in VPN'sini kullanıyorsanız (ağ Tercihleri Bölmesiyle ayarlanır) "gelişmiş" e tıklayıp "Talep Üzerine VPN" sekmesini seçmelisiniz. daha sonra VPN'in kullanması için gerekli alt ağları sağlayın.
Locamatic işlevine benzer şekilde, Split Tunnel yönlendirmesini etkinleştirmek için oturum açarken çalıştırabilen (ve çalışmaya devam ederek / saklanabilen) yerel bir 'uygulama' istedim . Belki bir noktada Locamatic'i çatallayacağım ve onunla oynayacağım. Ayrıca bu AppleScript’i Github’a yükleyebilirim. Bu cevabın önerdiği gibi bir daemon ile uğraşmak istemedim .
Bu komut dosyası VPN'in varsayılan bir VPN (Cisco IPSec)
adı olduğunu ve VPN yolunun 10.10.10.1/22
> olduğunu varsayar 10.10.20.10
. Bunların değiştirilmesi / ilave yolların eklenmesi gerekecek. netstat -rn
VPN bağlıyken (bu betiği etkinleştirmeden önce) VPN ile eklenen rotaları görmek için terminali çalıştırın .
Bu komut dosyası aynı zamanda Bildirim Merkezi’nde growl tarzı bildirimler oluşturur :)
Birlikte bazı sorunlarla karşılaştıysanız Mark E. Haase 'ın cevabı bir gelen benim Cisco VPN değiştirir mevcut ağ geçidi olarak UCSc
bir karşı UGScI
(en0 arayüz özgü) rota ve VPN ağ geçidi ekler UCS
iki varsayılan ağ geçitleri silinmesini gerektirecek ve arka ekleyerek, rota orijinal UGSc
varsayılan ağ geçidi
StackExchange / google’a şükürler olsun ki bu benim ilk AppleScript'im ve birkaç saatlik googling olmadan bir araya getiremedim.
Öneriler / düzeltmeler / optimizasyonlar hoş geldiniz!
AppleScript ( GitHubGist ):
global done
set done to 0
on idle
set status to do shell script "scutil --nc status "VPN (Cisco IPSec)" | sed -n 1p"
# do shell script "scutil --nc start "VPN (Cisco IPSec)"
if status is "Connected" then
if done is not 1 then
display notification "VPN Connected, splitting tunnel"
set gateway to do shell script "( netstat -rn | awk '/default/ {if ( index($6, \"en\") > 0 ){print $2} }' ) # gets non-VPN default gateway"
do shell script "sudo route delete default" # deletes VPN-assigned global (UCS) default gateway
do shell script "sudo route delete default -ifscope en0" # deletes en0 interface-specific (UGScI) LOCAL non-vpn gateway that prevents it being re-added as global default gateway
do shell script "sudo route add default " & gateway # re-adds LOCAL non-vpn gateway (from get command above) as global default gateway
do shell script "sudo route add 10.10.10.1/22 10.10.20.10" # adds VPN route
display notification "VPN tunnel has been split"
set done to 1
end if
else
if done is not 2 then
display notification "VPN Disconnected"
set done to 2
end if
end if
return 5
end idle
uygulama olarak kaydet:
sağ tık> paket içeriğini göster, aşağıdakini info.plist'e ekleyin (bu uygulama simgesini dock'tan gizler, uygulamadan pkill -f 'Split Tunnel'
çıkmak için Aktivite İzleyicisi veya terminal kullanımı gerektiriyorsa> bir dock simgesi istemiyorsanız atlayın:
<key>LSBackgroundOnly</key>
<string>1</string>
Yeni bir tek satırlık oluşturmak routeNOPASSWD
TAM aşağıdaki kodu kullanarak dosyayı (hiçbir uzantı) (bu yanlış yapılırsa Sudo erişimi engelleyebilir, google visudo
fazla bilgi için - bu AppleScript sudo komutları istemi bir şifre OLMADAN çalışmasını sağlar, sen ihmali İSTİYORUM eğer yönlendirme tablosunun değiştirilmesi gerektiğinde bir şifre istemi):
%admin ALL = (ALL) NOPASSWD: /sbin/route
bu dosyayı kopyala /etc/sudoers.d
Aşağıdaki komutları terminalde çalıştırın (ikinci komut parola isteyecektir - bu sudo route
AppleScript'teki komutların parola sormaksızın çalıştırılmasını sağlar, komut dosyası yönlendirme tablosunu değiştirirken bir parola istemi isteniyorsa atlayın)
chmod 440 /private/etc/sudoers.d/routeNOPASSWD
sudo chown root /private/etc/sudoers.d/routeNOPASSWD
Sonunda uygulamayı Sistem Tercihleri> Kullanıcılar ve Gruplar> giriş öğelerine ekleyin.
Bağlandığınız yönlendiricinin yöneticisine, tüneli bölecek şekilde ayrı bir "grup" kurmasını ve size o grup için grup adını ve grup şifresini içeren bir PCF dosyası vermesini isteyebilmeniz gerekir.
Aynı sorunu yaşadım ve @mehaase sayesinde bu çalışmaya başladım
~/vpn.sh
@Mehaase tarafından cevaplandırıldığı şekliyle oluşturduktan sonra, aşağıdaki adımları kullanarak bunu çalıştırılabilir bir uygulama otomator komut dosyasına koyabilirsiniz:
do shell script "sudo ~/vpn.sh" with administrator privileges
chmod 700 ~/vpn.sh
Komut dosyasının yürütme ayrıcalıklarını vermek için Terminal'den çalıştırmanız da gerekebilir .
VPN'e bağlandıktan sonra bu uygulama betiğini çalıştırabilirsiniz. Yönetici şifrenizi girin ve tamam - Tamam 'ı tıklayın. :)