จะอนุญาตการเข้าถึง LAN ในพื้นที่ในขณะเชื่อมต่อกับ Cisco VPN ได้อย่างไร


82

ฉันจะรักษาการเชื่อมต่อ LAN ภายในขณะที่เชื่อมต่อกับ Cisco VPN ได้อย่างไร

เมื่อเชื่อมต่อโดยใช้ Cisco VPN เซิร์ฟเวอร์จะต้องสามารถสั่งให้ไคลเอ็นต์ป้องกันการเข้าถึง LAN ในพื้นที่ได้

สมมติว่าไม่สามารถปิดตัวเลือกฝั่งเซิร์ฟเวอร์นี้จะอนุญาตการเข้าถึง LAN ในพื้นที่ในขณะที่เชื่อมต่อกับไคลเอนต์ Cisco VPN ได้อย่างไร


ฉันเคยคิดว่ามันเป็นเพียงเรื่องของเส้นทางที่เพิ่มเข้ามาซึ่งจับภาพการรับส่งข้อมูล LAN ด้วยตัวชี้วัดที่สูงขึ้นตัวอย่างเช่น:

  Network 
Destination      Netmask        Gateway       Interface  Metric
   10.0.0.0  255.255.0.0       10.0.0.3        10.0.0.3      20  <--Local LAN
   10.0.0.0  255.255.0.0  192.168.199.1  192.168.199.12       1  <--VPN Link

และการพยายามลบ10.0.x.x -> 192.168.199.12เส้นทางไม่มีผลใด ๆ :

>route delete 10.0.0.0
>route delete 10.0.0.0 mask 255.255.0.0
>route delete 10.0.0.0 mask 255.255.0.0 192.168.199.1
>route delete 10.0.0.0 mask 255.255.0.0 192.168.199.1 if 192.168.199.12
>route delete 10.0.0.0 mask 255.255.0.0 192.168.199.1 if 0x3

และในขณะที่ยังอาจเป็นปัญหาการกำหนดเส้นทางเพียงพยายามเพิ่มหรือลบเส้นทางที่ล้มเหลว

ไดรเวอร์ไคลเอนต์ Cisco VPN ทำในระดับใดได้บ้างในเน็ตเวิร์กสแต็กที่แทนที่ความสามารถของผู้ดูแลระบบโลคัลในการจัดการเครื่องของตน?

ไคลเอนต์ Cisco VPN ไม่สามารถใช้เวทมนตร์ได้ ยังคงเป็นซอฟต์แวร์ที่ทำงานบนคอมพิวเตอร์ของฉัน มันใช้กลไกอะไรในการแทรกแซงเครือข่ายของเครื่อง? จะเกิดอะไรขึ้นเมื่อแพ็กเก็ต IP / ICMP มาถึงบนเครือข่าย แพ็คเก็ตที่ถูกกินอยู่ที่ไหน

ดูสิ่งนี้ด้วย


แก้ไข:สิ่งที่ฉันยังไม่ได้ลอง:

>route delete 10.0.*

อัปเดต:เนื่องจากซิสโก้ได้ละทิ้งไคลเอนต์เก่าของพวกเขาซึ่งเป็นที่นิยมของ AnyConnect (HTTP ที่ใช้ SSL SSL) คำถามนี้ที่ยังไม่ได้แก้สามารถทิ้งไว้เป็นประวัติของที่ระลึกได้

ก้าวไปข้างหน้าเราสามารถพยายามที่จะแก้ปัญหาเดียวกันกับลูกค้าใหม่ของพวกเขา


1
ลิงก์ VPN มีตัวชี้วัดที่ต่ำกว่าและจะถูกลองใช้ก่อนที่เส้นทางท้องถิ่นของคุณ การเพิ่มการวัดของ LAN ท้องถิ่นของคุณน่าจะเป็นการปิด LAN ท้องถิ่นของคุณ หาก VPN ไม่ได้รับการกำหนดค่าให้ทำการรับส่งข้อมูลการเปลี่ยนเครือข่ายภายในบ้านของคุณอาจเป็นวิธีแก้ปัญหา IP ใดที่คุณต้องการใช้ผ่าน VPN นี้ นี่คือ 10.0.0.0 ทั้งหมดในฝั่ง VPN หรือไม่
pberlijn

ฟังดูเหมือนว่าดีมากอาจเป็นปัญหา ฉันคิดว่าตัวชี้วัดของสูง = ดีกว่า
เอียนบอยด์

1
อันที่จริงตัวชี้วัดล่าง = แนะนำ
Jonathon Reinhart

2
Cisco AnyConnect สามารถแทนที่ด้วย OpenConnect ซึ่งเป็นทางเลือกไคลเอ็นต์ที่เข้ากันได้ส่วนใหญ่ที่อธิบายไว้ที่serverfault.com/a/664097/104573
Vadzim

คำตอบ:


53

ปัญหาเกี่ยวกับ Anyconnect คือการปรับเปลี่ยนตารางการเราต์ก่อนจากนั้นรองรับและแก้ไขหากคุณแก้ไขด้วยตนเอง ฉันพบวิธีแก้ปัญหาสำหรับสิ่งนี้ ทำงานร่วมกับรุ่น 3.1.00495, 3.1.05152, 3.1.05170 และอาจเป็นอย่างอื่นในตระกูล 3.1 อาจทำงานกับเวอร์ชันอื่นอย่างน้อยแนวคิดที่คล้ายกันควรใช้งานได้หากรหัสไม่ได้รับการเขียนใหม่ โชคดีสำหรับเราซิสโก้ได้วางสายเรียก "เด็กอ่อน" ไว้ในห้องสมุดสาธารณะ ดังนั้นแนวคิดก็คือเราป้องกันการกระทำโดย vpnagentd ผ่าน LD_PRELOAD

  1. ก่อนอื่นเราสร้างไฟล์hack.c:

    #include <sys/socket.h>
    #include <linux/netlink.h>
    
    int _ZN27CInterfaceRouteMonitorLinux20routeCallbackHandlerEv()
    {
      int fd=50;          // max fd to try
      char buf[8192];
      struct sockaddr_nl sa;
      socklen_t len = sizeof(sa);
    
      while (fd) {
         if (!getsockname(fd, (struct sockaddr *)&sa, &len)) {
            if (sa.nl_family == AF_NETLINK) {
               ssize_t n = recv(fd, buf, sizeof(buf), MSG_DONTWAIT);
            }
         }
         fd--;
      }
      return 0;
    }
    
  2. จากนั้นรวบรวมมันเช่นนี้

    gcc -o libhack.so -shared -fPIC hack.c
    
  3. ติดตั้งlibhack.soลงในพา ธ ไลบรารีของ Cisco:

    sudo cp libhack.so  /opt/cisco/anyconnect/lib/
    
  4. นำตัวแทนลงมา:

    /etc/init.d/vpnagentd stop
    
  5. ตรวจสอบให้แน่ใจว่ามันลงจริง ๆ

    ps auxw | grep vpnagentd
    

    ถ้าไม่kill -9เพียงเพื่อให้แน่ใจว่า

  6. จากนั้นแก้ไข /etc/init.d/vpnagentd โดยเพิ่มLD_PRELOAD=/opt/cisco/anyconnect/lib/libhack.so ตำแหน่งที่เรียกใช้ vpnagentd ดังนั้นจึงมีลักษณะดังนี้:

    LD_PRELOAD=/opt/cisco/anyconnect/lib/libhack.so /opt/cisco/anyconnect/bin/vpnagentd
    
  7. ตอนนี้เริ่มตัวแทน:

    /etc/init.d/vpnagentd start
    
  8. แก้ไข iptables เพราะ AnyConnect ยุ่งกับมัน:

    iptables-save | grep -v DROP | iptables-restore
    

    คุณอาจต้องการทำบางสิ่งที่ทันสมัยกว่านี้เพื่อให้สามารถเข้าถึงโฮสต์ LAN บางแห่งเท่านั้น

  9. ตอนนี้แก้ไขเส้นทางตามที่คุณต้องการเช่น:

    route add -net 192.168.1.0 netmask 255.255.255.0 dev wlan0
    
  10. ตรวจสอบเพื่อดูว่าพวกเขามีจริง ๆ :

    route -n
    

แฮ็ครุ่นก่อนหน้านี้ที่เรียบง่ายกว่านี้มีฟังก์ชั่นที่ "ส่งคืน 0 เท่านั้น" - โปสเตอร์นั้นตั้งข้อสังเกตว่า "ผลข้างเคียงเดียวที่ฉันสังเกตได้คือ vpnagentd ใช้ CPU 100% ตามที่รายงานโดย top แต่ CPU โดยรวมเป็นเพียงผู้ใช้ 3% และระบบ 20% และระบบตอบสนองได้อย่างสมบูรณ์แบบ ฉันรัดมันดูเหมือนว่าจะเลือกสองตัวในลูปเมื่อไม่ได้ใช้งานทั้งสองกลับมาอย่างรวดเร็ว แต่มันไม่เคยอ่านหรือเขียน - ฉันคิดว่าการโทรที่ตัดออกด้วย LD_PRELOAD นั้นน่าจะเป็นวิธีที่สะอาดกว่า ที่จะทำ แต่ก็ดีพอสำหรับฉันถ้าใครมีทางออกที่ดีกว่าโปรดแบ่งปัน "

ปัญหาของการแฮ็กเล็กน้อยนั้นเป็นสาเหตุให้ซีพียูคอร์เดี่ยวมี 100% ตลอดเวลาลดการนับเธรดซีพียูฮาร์ดแวร์ของคุณได้อย่างมีประสิทธิภาพทีละหนึ่ง - ไม่ว่าการเชื่อมต่อ VPN ของคุณจะทำงานหรือไม่ ฉันสังเกตเห็นว่าการเลือกรหัสกำลังทำอยู่บนซ็อกเก็ต netlink ซึ่งส่งข้อมูล vpnagentd เมื่อตารางเส้นทางเปลี่ยนไป vpnagentd คอยสังเกตว่ามีข้อความใหม่บนซ็อคเก็ต netlink และโทรไปที่ routeCallBackHandler เพื่อจัดการกับมัน แต่เนื่องจากการแฮ็คที่ไม่สำคัญไม่ได้ลบข้อความใหม่ รหัสใหม่ที่ให้ไว้ด้านบนจะล้างข้อมูล netlink ดังนั้นการวนซ้ำไม่รู้จบซึ่งทำให้ซีพียู 100% ไม่เกิดขึ้น

หากบางสิ่งบางอย่างใช้งานไม่ได้gdb -p $(pidof vpnagentd)ให้เชื่อมต่อทันที:

b socket
c
bt

และดูว่าคุณกำลังโทรเข้าสายใดจากนั้นให้เดาว่าคนที่คุณต้องการตัดออกเพิ่มไปยัง hack.c และคอมไพล์ใหม่


4
นี่คืออัจฉริยะ ฉันพยายามที่จะทำให้การทำงานใน OSX และมีหนึ่งคำถาม: วิธีการที่คุณรู้ว่าวิธีการที่จะแทนที่เป็นชื่อ_ZN27CInterfaceRouteMonitorLinux20routeCallbackHandlerEv?
donturner

2
@donturner ลองnm /opt/cisco/anyconnect/lib/libvpnagentutilities.dylib | grep routeCallbackHandlerEvแล้วคุณจะพบ__ZN25CInterfaceRouteMonitorMac20routeCallbackHandlerEv
McKelvin

ฉันคิดออกโดยแนบ vpnagentd กับ gdb และตั้งจุดพักต่าง ๆ
Sasha Pachev

@McKelvin nm /opt/cisco/anyconnect/lib/libvpnagentutilities.soกลับมา nm: /opt/cisco/anyconnect/lib/libvpnagentutilities.so: no symbolsที่ AnyConnect ของฉันภายใต้ Ubuntu ดังนั้นมันจึงถูกสร้างขึ้นโดยไม่มีข้อมูลตารางสัญลักษณ์ คุณจะได้อย่างไร
หลานชาย

@SashaPachev คุณจะดีบัก vpnagentd โดยไม่มีข้อมูลสัญลักษณ์ได้อย่างไร
nephewtom

11

นี่เป็นวิธีที่ซับซ้อนมาก แต่ถ้าคุณสร้าง VM ขั้นต่ำโดยใช้ VMWare Player หรือคล้ายกันและเรียกใช้ไคลเอนต์ Cisco AnyConnect VPN ในนั้นคุณอาจตั้งค่าการกำหนดเส้นทางตามที่คุณต้องการโดยใช้อะแดปเตอร์เครือข่ายเสมือน VMWare หรือเพียงแค่ใช้ VM สำหรับการเข้าถึงทรัพยากรที่ต้องการผ่าน Cisco SSL VPN และไฟล์ "ลาก / วาง" ไปยัง / จากเครื่องจริงของคุณ


7

ซอฟต์แวร์Shrew Soft VPN ทำเพื่อฉันเช่นเดียวกับที่Ian Boydแนะนำ

สามารถนำเข้าโปรไฟล์ไคลเอนต์ Cisco VPN ฉันใช้ Cisco VPN Client เวอร์ชัน 5.0.05.0290 แล้วหลังจากติดตั้ง Shrew VPN (รุ่น 2.1.7) และนำเข้าโปรไฟล์ Cisco ฉันสามารถเข้าถึง LAN ภายในขณะที่เชื่อมต่อกับ VPN ขององค์กรโดยไม่ต้องกำหนดค่าเพิ่มเติมใด ๆ ของการเชื่อมต่อ Shrew VPN (หรือ ซอฟต์แวร์).


มันจะน่าอัศจรรย์ถ้ามีให้สำหรับ Android
Gabriel Fair

1
ฉันมาจากปี 2019 และใช้งานได้ !!!!!!
Sergey Povisenko

5

ขอบคุณSasha Pachevสำหรับการแฮ็คที่ดีข้างต้น

vpnagentd/etc/resolv.confยังยุ่งกับการจำแนกโดยการเขียนทับการเปลี่ยนแปลงที่เกิดขึ้นกับ ฉันแก้ไขมันด้วยการชนะการแข่งกับมันในที่สุด:

#!/bin/bash

dnsfix() {
    [ -f /etc/resolv.conf.vpnbackup ] || echo "Not connected?" >&2 || return 0 # do nothing in case of failure
    while ! diff -q /etc/resolv.conf /etc/resolv.conf.vpnbackup #>/dev/null
    do
         cat /etc/resolv.conf.vpnbackup >/etc/resolv.conf
    done
    chattr +i /etc/resolv.conf
    diff -q /etc/resolv.conf /etc/resolv.conf.vpnbackup >/dev/null 
}

while ! dnsfix
do
    echo "Retrying..."
    chattr -i /etc/resolv.conf
done

อย่าลืมchattr -i /etc/resolv.confเมื่อตัดการเชื่อมต่อ

ฉันพยายามที่จะแก้ปัญหาโดยขัดขวางการโทรกลับเช่นวิธีการด้านบน แต่ยังไม่พบวิธีการติดต่อกลับหรือวิธีการที่สอดคล้องกัน

Update1 / 2: การstraceเปิดเผยที่vpnagentdใช้inotifyAPI เพื่อตรวจสอบการเปลี่ยนแปลงไฟล์ตัวแก้ไข จากนั้นเป็นต้นไปมันตกต่ำ นี่คือแฮ็คเพิ่มเติม:

int _ZN18CFileSystemWatcher11AddNewWatchESsj(void *string, unsigned int integer)
{
  return 0;
}

นั่นเป็นเรื่องที่เกินความจริงเล็กน้อยเนื่องจากได้ปิดใช้งานการดูไฟล์ทั้งหมดสำหรับเอเจนต์ แต่ดูเหมือนว่าจะใช้ได้

สคริปต์ตัวห่อลูกค้า vpn ด้านล่างรวมการทำงานทั้งหมด (อัปเดตเพื่อรวมแฮ็คเพิ่มเติมนี้) chattrไม่ได้ใช้ / จำเป็นอีกต่อไป

อัปเดต 3: แก้ไขการตั้งค่าชื่อผู้ใช้ / รหัสผ่านในสคริปต์ ตอนนี้ใช้vpn.confไฟล์ที่มีรูปแบบที่อธิบายด้านล่าง (และสิทธิ์แบบรูทเท่านั้น)

#!/bin/bash

# Change this as needed
CONF="/etc/vpnc/vpn.conf"
# vpn.conf format
#gateway <IP>
#username <username>
#password <password>
#delete_routes <"route spec"...> eg. "default gw 0.0.0.0 dev cscotun0"
#add_routes <"route spec"...> eg. "-net 192.168.10.0 netmask 255.255.255.0 dev cscotun0" "-host 10.10.10.1 dev cscotun0"

ANYCONNECT="/opt/cisco/anyconnect"

usage() {
    echo "Usage: $0 {connect|disconnect|state|stats|hack}"
    exit 1
}

CMD="$1"
[ -z "$CMD" ] && usage

ID=`id -u`

VPNC="$ANYCONNECT/bin/vpn"

dnsfix() {
    [ -f /etc/resolv.conf.vpnbackup ] || echo "Not connected?" >&2 || return 0 # do nothing in case of failure
    while ! diff -q /etc/resolv.conf /etc/resolv.conf.vpnbackup >/dev/null
    do
         cat /etc/resolv.conf.vpnbackup >/etc/resolv.conf
    done
#    chattr +i /etc/resolv.conf
    diff -q /etc/resolv.conf /etc/resolv.conf.vpnbackup >/dev/null 
}

case "$CMD" in
    "connect")
        [ $ID -ne 0 ] && echo "Needs root." && exit 1
        HOST=`grep ^gateway $CONF | awk '{print $2}'`
        USER=`grep ^user $CONF | awk '{print $2}'`
        PASS=`grep ^password $CONF | awk '{print $2}'`
        OLDIFS=$IFS
        IFS='"'
        DEL_ROUTES=(`sed -n '/^delete_routes/{s/delete_routes[ \t\"]*//;s/\"[ \t]*\"/\"/g;p}' $CONF`)
        ADD_ROUTES=(`sed -n '/^add_routes/{s/add_routes[ \t\"]*//;s/\"[ \t]*\"/\"/g;p}' $CONF`)
        IFS=$OLDIFS

        /usr/bin/expect <<EOF
set vpn_client "$VPNC";
set ip "$HOST";
set user "$USER";
set pass "$PASS";
set timeout 5
spawn \$vpn_client connect \$ip
match_max 100000
expect { 
    timeout {
        puts "timeout error\n"
        spawn killall \$vpn_client
        exit 1
    }
    ">> The VPN client is not connected." { exit 0};
    ">> state: Disconnecting" { exit 0};
    "Connect Anyway?"
}
sleep .1
send -- "y\r"
expect { 
    timeout {
        puts "timeout error\n"
        spawn killall \$vpn_client
        exit 1
    }
    "Username:"
}
sleep .1
send -- "\$user\r"
expect { 
    timeout {
        puts "timeout error\n"
        spawn killall \$vpn_client
        exit 1
    }
    "Password: "
}
send -- "\$pass\r";
expect eof
EOF
        sleep 2
        # iptables
        iptables-save | grep -v DROP | iptables-restore

        # routes
        for ROUTE in "${DEL_ROUTES[@]}"
        do
#            echo route del $ROUTE
            route del $ROUTE
        done
        for ROUTE in "${ADD_ROUTES[@]}"
        do
#            echo route add $ROUTE
            route add $ROUTE
        done

        # dns
        while ! dnsfix
        do
            echo "Try again..."
#            chattr -i /etc/resolv.conf
        done

        echo "done."
        ;;
    "disconnect")
#        [ $ID -ne 0 ] && echo "Needs root." && exit 1
        # dns
#        chattr -i /etc/resolv.conf

        $VPNC disconnect
        ;;
    "state"|"stats")
        $VPNC $CMD
        ;;
    "hack")
        [ $ID -ne 0 ] && echo "Needs root." && exit 1
        /etc/init.d/vpnagentd stop
        sleep 1
        killall -9 vpnagentd 2>/dev/null
        cat - >/tmp/hack.c <<EOF
#include <sys/socket.h>
#include <linux/netlink.h>

int _ZN27CInterfaceRouteMonitorLinux20routeCallbackHandlerEv()
{
  int fd=50;          // max fd to try
  char buf[8192];
  struct sockaddr_nl sa;
  socklen_t len = sizeof(sa);

  while (fd) {
     if (!getsockname(fd, (struct sockaddr *)&sa, &len)) {
        if (sa.nl_family == AF_NETLINK) {
           ssize_t n = recv(fd, buf, sizeof(buf), MSG_DONTWAIT);
        }
     }
     fd--;
  }
  return 0;
}

int _ZN18CFileSystemWatcher11AddNewWatchESsj(void *string, unsigned int integer)
{
  return 0;
}
EOF
        gcc -o /tmp/libhack.so -shared -fPIC /tmp/hack.c
        mv /tmp/libhack.so $ANYCONNECT
        sed -i "s+^\([ \t]*\)$ANYCONNECT/bin/vpnagentd+\1LD_PRELOAD=$ANYCONNECT/lib/libhack.so $ANYCONNECT/bin/vpnagentd+" /etc/init.d/vpnagentd
        rm -f /tmp/hack.c
        /etc/init.d/vpnagentd start
        echo "done."
        ;;
    *)
        usage
        ;;
esac

1
แฮ็คแจ้งเตือนของคุณแก้ไขปัญหาที่พบใหม่ (2017-02-25) ของฉันกับการติดตั้ง AnyConnect 3.1.14018 ของฉันซึ่งมันจะตัดการเชื่อมต่อทุกครั้งที่ฉันเปิดหน้าต่างเทอร์มินัลหรือหน้าจอ GNU ใหม่ กำลังดู / var / run / utmp ด้วยเหตุผลบางอย่าง ขอบคุณมาก!
Martin Dorey

ดี บางครั้ง "overkill" อาจเป็นเพื่อนของคุณได้ :-)
Mauro Lacy

4

บริษัท ของฉันยังคงใช้ VPN นั้น ไคลเอนต์ vpnc เพียงแค่เปลี่ยนการตั้งค่า iptables ของคุณตามวิธี:

# iptables- บันทึก
# สร้างโดย iptables-save v1.4.10 เมื่อวันอาทิตย์ที่ 17 มิถุนายน 14:12:20 2012
*กรอง
: INPUT DROP [0: 0]
: ไปข้างหน้ายอมรับ [0: 0]
: OUTPUT DROP [0: 0]
-A INPUT -s 123.244.255.254/32 -d 192.168.0.14/32 -j ACCEPT 
-A INPUT -i tun0 -j ยอมรับ 
-A อินพุต - i lo0 -j ยอมรับ
-A INPUT -j DROP 
-A OUTPUT -s 192.168.0.14/32 -d 123.244.255.254/32 -j ACCEPT 
-A เอาท์พุท -o tun0 -j ยอมรับ 
-A เอาท์พุท -o lo0 -j ยอมรับ 
-A เอาท์พุท -j DROP 
COMMIT

มันกรองทั้งหมดยกเว้นการรับส่งข้อมูล vpn

เพียงแค่รับตัวกรองในไฟล์ที่มี iptables-save เพิ่มสายเข้า INPUT และ OUTPOUT ที่ตรงกับความต้องการของคุณและนำไฟล์นั้นกลับมาใช้ใหม่ด้วย iptables-restore

เช่นการเข้าถึงเครือข่ายท้องถิ่นที่ 192.168.0

# สร้างโดย iptables-save v1.4.10 เมื่อวันอาทิตย์ที่ 17 มิถุนายน 14:12:20 2012
*กรอง
: INPUT DROP [0: 0]
: ไปข้างหน้ายอมรับ [0: 0]
: OUTPUT DROP [0: 0]
-A INPUT -s 123.244.255.254/32 -d 192.168.0.14/32 -j ACCEPT 
-A INPUT -s 192.168.0.0/24 -d 192.168.0.14/32 -j การยอมรับ # local ใน
-A INPUT -i tun0 -j ยอมรับ 
-A อินพุต - i lo0 -j ยอมรับ 
-A INPUT -j DROP 
-A OUTPUT -s 192.168.0.14/32 -d 123.244.255.254/32 -j ACCEPT 
-A เอาท์พุท -s 192.168.0.14/32 -d 192.168.0.0/24 -j ได้รับการยอมรับ # local ออก
-A เอาท์พุท -o tun0 -j ยอมรับ 
-A เอาท์พุท -o lo0 -j ยอมรับ 
-A เอาท์พุท -j DROP 
COMMIT

2
มันผิดมันไม่ง่ายเลยที่จะเพิ่มเส้นทางของคุณ .. ฉันพยายามแล้วมันใช้งานไม่ได้ .. ไคลเอนต์ VPN ควบคุมตารางเคอร์เนลเส้นทางซึ่งไม่ยอมให้คุณปรับเปลี่ยน
Satish

3

มีข่าวเกี่ยวกับเรื่องนี้ไหม?

ไดรเวอร์ไคลเอนต์ Cisco VPN ทำในระดับใดได้บ้างในเน็ตเวิร์กสแต็กที่แทนที่ความสามารถของผู้ดูแลระบบโลคัลในการจัดการเครื่องของตน?

ฉันเห็นด้วยอย่างยิ่งและสงสัยในสิ่งเดียวกัน

อย่างไรก็ตามมันเป็นแอพที่ต้องใช้สิทธิ์ผู้ดูแลระบบในการติดตั้งและในขณะที่มันทำงานมันอาจกรองสิ่งที่คุณทำ ...

ความพยายามของฉันใน Windows ล้มเหลวด้วย:

route change 0.0.0.0 mask 0.0.0.0 192.168.1.1 metric 1
 OK!

IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0      192.168.1.1    192.168.1.230     21 <-- LAN
          0.0.0.0          0.0.0.0    192.168.120.1    192.168.120.3      2 <-- VPN

ฮ่าฮ่า ดูเหมือนไม่มีเมตริกต่ำกว่า 20 ที่นี่


เท่าที่เกี่ยวข้องกับลินุกซ์ ( petefreitag.com/item/753.cfm ) นี้ดูเหมือนว่าจะระบุว่าไฟร์วอลล์มีส่วนเกี่ยวข้องด้วย
Marki

2
ฉันพบ ShrewSoft VPN สามารถเชื่อมต่อกับเซิร์ฟเวอร์ Cisco IPSec VPN และไม่สนใจความต้องการของผู้ดูแลระบบเซิร์ฟเวอร์ VPN ที่ฉันถูกตัดการเชื่อมต่อจากเครือข่ายของฉันเอง (ดูsuperuser.com/questions/312947/…สำหรับคำแนะนำโดยละเอียด) แม้ว่าจะไม่ได้ตอบคำถามนี้ แต่ก็เป็นวิธีแก้ปัญหา หมายเหตุ : ShrewSoft VPN ใช้งานได้กับ IPSec เท่านั้น มันไม่ทำงานกับ SSL VPN (เช่นไคลเอนต์ Cisco AnyConnect VPN ใหม่กว่า)
Ian Boyd

3

ฉันไม่รู้ว่าฉันเข้าใจถูกต้องหรือไม่ แต่ฉันชี้แจงความเข้าใจก่อน

คุณมี LAN ท้องถิ่น (เช่นพูด 10.0.0.0/16 และเซิร์ฟเวอร์ VPN VPN ระยะไกล (ตัวอย่างเช่น 64.0.0.0/16) คุณต้องการเชื่อมต่อกับเซิร์ฟเวอร์ VPN ผ่านไคลเอนต์ Cisco VPN และคุณยังต้องการ เพื่อให้สามารถเข้าถึง LAN ในกรณีนี้คุณต้องการแยกทั้ง 10.0.xx / 16 ทั้งหมดจากการเชื่อมต่อ VPN) ต้องเพิ่มเส้นทางต่อไปนี้ในไคลเอนต์ Mac:

/sbin/route add -net 10.0 -interface en1

โดยที่ en1 เป็นอินเทอร์เฟซที่คุณเชื่อมต่อกับ LAN ของคุณ ฉันรู้ว่าคุณสามารถเพิ่มสิ่งเดียวกันใน Windows และ Linux เช่นกัน


3
+1 สำหรับไคลเอ็นต์ Mac ซึ่งใช้ไม่ได้กับฉัน และในขณะที่คำสั่งนี้อาจจะทำงานที่ลูกค้าของซิสโก้อาจลบมันไม่นานหลังจากที่ถูกสร้างขึ้น (ไคลเอนต์ของซิสโก้ดูเหมือนว่าจะป้องกันไม่ให้คนจากการเปลี่ยนเส้นทาง)
เอียนบอยด์

2

เนื่องจากฉันไม่สามารถเพิ่มความคิดเห็นฉันจะโพสต์ที่นี่ ฉันทำงานบน Windows

โซลูชันที่ใช้ Virtual Machine และเรียกใช้ AnyConnect ภายใน VM จากนั้นใช้ VM เป็นสื่อกลางระหว่างสภาพแวดล้อมการทำงานของคุณและเครือข่ายของ บริษัท จะไม่ทำงานหากแผนก IT ของคุณ "ที่รัก" กำหนดเส้นทาง 0.0.0.0 ผ่าน VPN ดังนั้นแม้แต่เครือข่ายท้องถิ่นของคุณ ระหว่างพีซีและ VM ของคุณจะถูกส่งผ่าน VPN (sic!)

ฉันพยายามใช้วิธีแก้ปัญหาที่โพสต์โดย @Sasha Pachev แต่ในที่สุดฉันก็ลงเอยด้วยการแก้ไข. dll เพื่อที่จะให้ผลลัพธ์เป็น 0 ในตอนเริ่มต้นของฟังก์ชัน ในที่สุดหลังจากการต่อสู้กับไลบรารีแบบไดนามิกฉันก็สามารถปรับเปลี่ยนตารางเส้นทางตามความต้องการของฉันได้ แต่ดูเหมือนไม่เพียงพอ!

แม้ว่ากฎของฉันดูเหมือนว่าจะถูกต้องเพื่อให้บรรลุการแยกอุโมงค์ แต่ฉันก็ยังได้รับความล้มเหลวทั่วไป คุณเจอปัญหาที่คล้ายกันซึ่งสามารถแก้ไขได้หรือไม่?

  • เกตเวย์ของฉันไปยังอินเทอร์เน็ตคือ 192.168.163.2
  • ประตูของฉันกับเครือข่ายของ บริษัท คือ 10.64.202.1 (ดังนั้นทั้ง 10 . . * เครือข่ายย่อยที่ผมปฏิบัติเป็น "comapny ของ")

นี่คือลักษณะตารางการจัดเส้นทางของฉันในตอนนี้ (หลังจากการแก้ไขด้วยตนเองในขณะที่เปิด VPN)

ป้อนคำอธิบายรูปภาพที่นี่

แต่ผลลัพธ์ของการ ping กำลังติดตาม

C:\Users\Mike>ping -n 1 10.64.10.11
Reply from 10.64.10.11: bytes=32 time=162ms TTL=127

C:\Users\Mike>ping -n 1 8.8.8.8
PING: transmit failed. General failure.

C:\Users\Mike>ping -n 1 192.168.163.2
General failure.

สำหรับการอ้างอิงด้านล่างเป็นลักษณะตารางเส้นทางเมื่อมีการตัดการเชื่อมต่อ VPN (ไม่เปลี่ยนแปลง)

ป้อนคำอธิบายรูปภาพที่นี่

และนี่เป็นลักษณะที่ตารางดูเหมือนเมื่อมีการเชื่อมต่อ VPN (ไม่เปลี่ยนแปลง) ในกรณีนั้นเมื่อฉันพยายาม ping 8.8.8.8ฉันเพิ่งจะหมดเวลา (เนื่องจากไฟร์วอลล์ของ บริษัท ไม่อนุญาตให้มีการรับส่งข้อมูลนอกอินทราเน็ต)

ป้อนคำอธิบายรูปภาพที่นี่


ฉันมีปัญหาในการแก้ไข DLL บางคนอาจให้สำเนาของพวกเขาหรือร่างรายละเอียดเพิ่มเติมอีกเล็กน้อยซึ่งต้องมีการปรับค่าชดเชยหรือไม่
Sean C

1

สำหรับผู้ที่ต้องการที่จะรักษาควบคุมของตารางเส้นทางของพวกเขาเมื่อใช้ Cisco AnyConnect SSL VPN, ตรวจสอบOpenConnect ทั้งสองรองรับ Cisco AnyConnect SSL VPN และไม่พยายามขัดขวางหรือตารางรายการเส้นทางที่ปลอดภัย @Vadzim alludes นี้ในการแสดงความคิดเห็นดังกล่าวข้างต้น

หลังจากที่พยายามทุกอย่าง แต่ปะ AnyConnect ปลอดภัย Mobility ลูกค้าผมก็สามารถที่จะประสบความสำเร็จแทนที่บน Windows กับOpenConnect GUI สิ่งนี้ทำให้ฉันสามารถรักษาการเชื่อมต่อกับทรัพยากรในท้องถิ่น (และอัปเดตตารางเส้นทาง)

ผมใช้ OpenConnect บน Windows แต่ก็ยังสนับสนุน Linux, BSD และ MacOS (ในแพลตฟอร์มอื่น ๆ ) ตามที่หน้าโครงการ


1
สิ่งนี้ใช้ได้สำหรับฉัน แต่องค์กรของฉันใช้โทเค็นดังนั้นรหัสผ่านจึงแตกต่างกันทุกครั้ง ดังนั้นฉันต้องเปลี่ยน "โหมดแบทช์" - ไม่เช่นนั้นมันจะบันทึกรหัสผ่านแรกและนำกลับมาใช้ใหม่
Gabriel Luci

0

ลองลบรายการเหล่านั้นด้วยเกตเวย์10.64.202.13ดูว่า ping 8.8.8.8ทำงานแล้วเพิ่มกลับทีละรายการและระบุว่ารายการใดก่อให้เกิดปัญหา

คุณแก้ไข DLL อย่างไร ฉันไม่สามารถแม้แต่จะปรับเปลี่ยนตารางการจัดเส้นทางได้เพราะมันจะเพิ่ม0.0.0.0ด้วย VPN gateway อีกครั้ง


1
หากคุณต้องการคำชี้แจงหรือข้อมูลเพิ่มเติมเกี่ยวกับคำถามกรุณาโพสต์ความคิดเห็นแทนที่จะรวมไว้ในคำตอบของคุณ ขอบคุณ
Matthew Williams

ไม่อนุญาตให้ฉันเพิ่มความคิดเห็นในคำถามที่มีอยู่
Tony
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.