Updated patch LGTM. One thing we could test is whether the ScanBatch is receiving two RecordReaders, so we are sure that we are lazily initializing the second RR, but currently we don't have test framework support to fragment verification.


TeamCity OSS :: Kubernetes Mesos :: 5 - Smoke Tests (docker/mesos) [Build 737](https://teamcity.mesosphere.io/viewLog.html?buildId=58239&buildTypeId=Oss_KubernetesMesos_5SmokeTestsDockerMesos&guest=1) outcome was **SUCCESS**
Summary: Tests passed: 1, ignored: 190 Build time: 00:04:04


Let's go over the hard mode questions in here and see how far we've come in understanding this stuff. I understand you got help (and there are some things in there I haven't taught yet) and while that's ok, the main point here is to make sure you're comprehending.


I'm confused. `try?` returns a `Result`, but the return type of this is is `Environment`?


Here we see that the accumulators are set to zero regardless of `_last_accel_timestamp[k] != _last_accel_update_timestamp[k]` being true, i.e., regardless of `_publish_accel()` being called. The new implementation (next commit) only clears the accumulators when `_publish_accel()` is called.


You can still use that function if you explicitly convert `name` to `NSString`:
```
`let fileWithExtension = (name as NSString).stringByAppendingPathExtension(fileExtension)!`
```


I suppose, since you *technically* can pass parameter to delete we just should ignore them


fix for bb/microbit-extras#2024


Maybe do `first! as NSURL` so that the potential failure is caught early?


Remove this if not used.


oh, wow, good to know


Here we see that the accumulator is set to zero regardless of `_last_gyro_timestamp[k] != _last_gyro_update_timestamp[k]` being true, i.e., regardless of `_publish_gyro()` being called. The new implementation (next commit) only clears the accumulator when `_publish_gyro()` is called.


wow code style


Two Spaces.


I think these parameter names might still be useful. You can keep the old behavior by doing:
```swift
public func map(value: Double, fromInterval fromInterval: (Double, Double), toInterval toInterval: (Double, Double)) -> Double {
```


Nice!


How about I start a side project of clutter free bot  ??

One that provides all the bells and whistles without all the stickers and banners all over it ..
It mirrors all the updates automatically but just omits all the ads .. .

what you say ?


@sdodson Wrong license.


93653630-MultipleYearRunPeriodForTabularReports (JasonGlazer) - x86_64-Linux-Ubuntu-14.04-gcc-4.8-UnitTestsCoverage-Debug: OK (837 of 837 tests passed)

![Build Badge](http://img.shields.io/badge/build%20status-passing-green.svg) ![Test Badge](http://img.shields.io/badge/tests%20passed-100.0%25-green.svg) ![Coverage Badge](http://img.shields.io/badge/coverage%20status-24.4%25-green.svg)


I think we already briefly touched on this, but what we're looking for in the return is an **empty** object...not one that contains z:undefined just to make the test pass. It's going to pass as long as the function is actually returning an object, even if the string passed in is empty or undefined.

```javascript
function letterCount(tester){
  if(tester){
    // do stuff and return the object
  } else {
    return {}; // return an empty object
  }
}
```


Issue5249-FixHWBBEngRef (wfbuhl) - i386-Windows-7-VisualStudio-12: OK (1909 of 1909 tests passed)

![Build Badge](http://img.shields.io/badge/build%20status-passing-green.svg) ![Test Badge](http://img.shields.io/badge/tests%20passed-100.0%25-green.svg)


On Tue, Oct 13, 2015 at 6:58 PM, DRC <notifications@github.com> wrote:

> A couple of issues with this:
>
>    -
>
>    It seems to short-circuit the previous checks for certificate
>    validity. Now if hostname verification fails, the user will get a dialog
>    asking whether they want to continue. If they click "Yes", then no further
>    validation is done on the certificate, and the user is never given the
>    option to add it to the trusted certificate store. I would expect that the
>    verification encompasses a chain of operations that must all succeed in
>    order for the certificate to be valid.
>
> ?  If they click yes, then verifyHostname returns a void and certificate
verification proceeds.  If they click no then an exception is thrown and
the viewer exits.

>
>    -
>
>    There is no way for a user to "trust" a particular hostname. I would
>    expect that, upon answering the trust question once, that question should
>    not be asked again for that particular host.
>
> Yeah, I thought about this, but ultimately I thought that if you're going
to go to the trouble of using x509 authentication then wouldn't you
probably have legitimate DNS?

>
>    -
>
>    I don't fully understand what this is verifying. What does a
>    certificate need in order to pass this test?
>
> Without hostname verification, x509 auth is vulnerable to
man-in-the-middle attacks as long as the attacker can present a valid
certificate.  In order to pass the check, the certificate needs to have one
of the following (in order of preference):

  (a) A FQDN entry in the dnsname OID of the AltSubjectName extension that
resolves back to the same IP address as the server end of the connection.
  (b) An IP address in the ipaddress OID of theAltSubjectName extension
that matches the IP address of the server end of the connection.
  (c) If the SAN extension is NOT present, and the CN contains an FQDN that
resolves back to an IP address matching the server end of the connection.
Note that this practice is optional, but I've seen it enough times that I
thought it was worst supporting.

I based my implementation off the recommendations found in RFC 6125
<https://tools.ietf.org/html/rfc6125>.

Note also that I made a couple of further changes after this commit, see PR
215.


oops - we need to get rid of this last line (line 54) or we're going to get some errors. Either delete it, or stick it in a comment.


I'm not verifying if `_imu._delta_velocity_acc_dt[instance]` is greater than zero before continuing. If `_imu._delta_velocity_acc_dt[instance]` is zero and `_imu._delta_velocity_valid[instance]` is set `true`, then `AP_InertialSensor::get_delta_velocity()` will report wrong values.


I think this patch is breaking emulated (internal sdcard) mount process.
Yes, I saw Google documentation but storage.xml is still called from frameworks (MountService.java).

humberos@ubuntu:/android/aosp-6.0/frameworks$ grep -r storage.xml
base/services/core/java/com/android/server/MountService.java:  new  File(Environment.getSystemSecureDirectory(), "storage.xml"));

Also, this file is still present on Shamu and Hammerhead devices repos. :/


this all works well, however we don't actually know what timsAge is going to be until we calculate it, so this conditional is unnecessary and will fail if we change the years.


The default slug should be all lowercase. `'Calendar'` -> `'calendar'`


Zaid, why do we need a Unit Of Work for querying data?


nice usage of Regex!


And what was the purpose of that?
These moving files around is really becoming a pain in the ass!


Unfortunately this will not work for amazon-fireos, which is "to be pinned" to android-19, isn't it? Any solution for that case?


The method getBuild() has a Cyclomatic Complexity of 11. The configured cyclomatic complexity threshold is 10.


`sanitize_title_with_dashes()` that wraps the gettext call will make it lowercase and replace any possible space with dashes - just a precaution


I think I may have a bigger screen, so for me the button wasn't centered. Nice job finding a way, though! I think I figured out how to center it without having to give it specific margins on the left:
`.call-to-action {
     text-align: center;
     padding-top: 45px;
}'
and then also
'.button-centering' should not have
'position: absolute;
padding-top: 45px;
padding-left: 675px;`


FYI, you could have done request.get(...).json (or <code>.json()</code>, I don't remember) to get the json here.


Merge two lines


Can you push it to npm?


Hmm, why don't you like space before `{`?


This created a compilation problem for me


TeTeTi responsivo hecho con php, jquery y bootstrap


You're correct. Missed that.


`checkRequestPrecondition`


We no longer want to expand this qualifier list, it is done through the built-ins now.


current time for unit-tests (php 5.6) : Time: 4.28 seconds, Memory: 16.00Mb
new time for unit-tests (php 5.6) : Time: 351 ms, Memory: 8.50Mb


this looks useful. Since there is now a "dischargeF" when checking functions, would the constraints be less general?


An anchor tag(or a tag) is an inline element. Therefore in order for you to align it center to it's parent div you must make it a block element by setting the display property to block.


@profile should be changed to @mention


This is used to write general header for all responses. Maybe `writeResponseGeneralHeader`


TeamCity OSS :: Kubernetes Mesos :: 5 - Smoke Tests (docker/mesos) [Build 740](https://teamcity.mesosphere.io/viewLog.html?buildId=58251&buildTypeId=Oss_KubernetesMesos_5SmokeTestsDockerMesos&guest=1) outcome was **SUCCESS**
Summary: Tests passed: 1, ignored: 190 Build time: 00:06:52


very nice try. Here is my recreation of the solution we came up with in class to compare:

```javascript
function isPalindrome(str) {
  var char1 = "";
  var char2 = "";

  for (var i = 0; i < str.length; i += 1) {
    char1 = str.charAt(i);
    char2 = str.charAt(str.length - i - 1);
    if (char1 !== char2) {
      return false;
    }
  }

  return true;
}
```


Looks good.  All changes are to make printing possible.  Increasing the sleep time for the thread seems good to give some time for the human to anticipate and react to the computer's move.


Technically Amaura/Aurorus can Refrigerate their Nature Power...


Any assertion is there for us to run tests (normally during a build time). The assumption is that the tests will hopefully pass, and if they do, you're ok to move forward. Normally, you won't want it to alert that every test has passed, only if something is wrong so that you need to look at it. This is a common practice when writing tests for your code to pass.


(The instance for list is broken in that upload, though, and it's not clear to me what you were trying to attain with `build`. I'll use `HEAD` for now.)


Oh and then for the button at the top, you need to
`text-align: center;` the `.container`
and then `.interest-button1' doesn't need a negative margin, but it does need a `margin-top`.


If you have ever used maven as a building tool, then this uses the already available maven cache that is on your system and doesn't download everything from the internet.


it is used in this [context](https://github.com/coreos/etcd/commit/723f64c11209eb36fe88f2c709d1f05cf146a4bb#diff-7a129841e2b4c6f5807eb6588ea189cbR72): `if err isCriticalErr, reportErr to error channel which is used detected critical error`, so I name it `isCriticalErr` to make it easier to read when use.


TeamCity OSS :: Kubernetes Mesos :: 5 - Smoke Tests (docker/mesos) [Build 741](https://teamcity.mesosphere.io/viewLog.html?buildId=58253&buildTypeId=Oss_KubernetesMesos_5SmokeTestsDockerMesos&guest=1) outcome was **SUCCESS**
Summary: Tests passed: 1, ignored: 189 Build time: 00:04:01


"not really": because the function application rule will add these joins / mode casts itself


TeamCity OSS :: Kubernetes Mesos :: 5 - Smoke Tests (docker/mesos) [Build 742](https://teamcity.mesosphere.io/viewLog.html?buildId=58254&buildTypeId=Oss_KubernetesMesos_5SmokeTestsDockerMesos&guest=1) outcome was **FAILURE**
Summary: Exit code 1 (new) Build time: 00:02:12


Awesome job on the assignment. The only thing missing from the rubric was the hover state effects. Other than that I honestly did not see anything that I would do differently except maybe adding alt tags to your images. Keep up the great work!

#FEWD Week #3 Project: CSS Layouts

---

###Description

Relaxr was really impressed by your work last week and wants you to continue development on their landing page. Starting in class, you will work to build out a more complex layout for their company site. They decided on creating a blog, and their back-end engineers will be focused on developing the blog's functionality. They want your front-end skills to style their designs using HTML and CSS so Relaxr's engineers can begin integrating. Once again, the designers have handed you a basic design file with instructions and the JPEG below to help you bring the blog to life. Submit the finished version for homework.

Student: Amanda Gaines

|                                                                                |                                |                        |                          |
|--------------------------------------------------------------------------------------------------------------------------------------|--------------------------------|------------------------|--------------------------|
| Technical Requirements                                                                                | Does Not Meet Expectations (0) | Meets Expectations (1) | Exceeds Expectations (2) |
| Use in-line-block or floats in your CSS to achieve a two-column layout                                                               |                                |                        |          x                |
| Use the correct ```Open Sans``` Google Font typeface to style the text denoted in the design file and according to the JPEG provided |                                |                        |            x              |
| Use proper filename conventions (lowercase, .html)                                                                                |                                |                        |               x           |
| Use a single external CSS stylesheet to style all pages                                                                              |                                |                        |                 x         |
| Use a background image for the headers                                                                                |                                |                        |                x          |
| Add a hover effect to all the links using pseudo-classes                                                                             |     x                           |                       |                          |
| Integrate drop caps using pseudo-classes                                                                                |                                |                       |         x                 |
| TOTAL: 12/14                                                                                |                                |                        |                          |


how are we able to import Baz from both bar and baz? I didn't think there would be any merging going on at least.


add_examples (lefticus) - i386-Windows-8.1-VisualStudio-14: Build Failed

![Build Badge](http://img.shields.io/badge/build%20status-failing-red.svg) ![Test Badge](http://img.shields.io/badge/tests%20passed-0.0%25-red.svg)


 - __style__: [include/chaiscript/language/chaiscript_parser.hpp:673](../blob/64dd349e32d8bd60006aac64ca350b00da40aa6f/include/chaiscript/language/chaiscript_parser.hpp#L673) Expression is always false because 'else if' condition matches previous condition at line 671. (multiCondition)
 - __style__: [include/chaiscript/language/chaiscript_parser.hpp:677](../blob/64dd349e32d8bd60006aac64ca350b00da40aa6f/include/chaiscript/language/chaiscript_parser.hpp#L677) Expression is always false because 'else if' condition matches previous condition at line 675. (multiCondition)
 - __style__: [include/chaiscript/language/chaiscript_parser.hpp:679](../blob/64dd349e32d8bd60006aac64ca350b00da40aa6f/include/chaiscript/language/chaiscript_parser.hpp#L679) Expression is always false because 'else if' condition matches previous condition at line 675. (multiCondition)
 - __style__: [include/chaiscript/language/chaiscript_parser.hpp:679](../blob/64dd349e32d8bd60006aac64ca350b00da40aa6f/include/chaiscript/language/chaiscript_parser.hpp#L679) Expression is always false because 'else if' condition matches previous condition at line 677. (multiCondition)
 - __information__: [src/chaiscript_stdlib.cpp:1](../blob/64dd349e32d8bd60006aac64ca350b00da40aa6f/src/chaiscript_stdlib.cpp#L1) Skipping configuration 'CHAISCRIPT_MSVC;max;min' since the value of 'max' is unknown. Use -D if you want to check it. You can use -U to skip it explicitly. (ConfigurationNotChecked)
 - __information__: [src/main.cpp:1](../blob/64dd349e32d8bd60006aac64ca350b00da40aa6f/src/main.cpp#L1) Skipping configuration 'CHAISCRIPT_MSVC;max;min' since the value of 'max' is unknown. Use -D if you want to check it. You can use -U to skip it explicitly. (ConfigurationNotChecked)
 - __style__: [src/chaiscript_stdlib.cpp:18](../blob/64dd349e32d8bd60006aac64ca350b00da40aa6f/src/chaiscript_stdlib.cpp#L18) The function 'create_chaiscript_module_chaiscript_stdlib' is never used. (unusedFunction)
 - __style__: [src/main.cpp:169](../blob/64dd349e32d8bd60006aac64ca350b00da40aa6f/src/main.cpp#L169) The function 'get_eval_error' is never used. (unusedFunction)
 - __style__: [src/main.cpp:140](../blob/64dd349e32d8bd60006aac64ca350b00da40aa6f/src/main.cpp#L140) The function 'help' is never used. (unusedFunction)
 - __style__: [src/main.cpp:216](../blob/64dd349e32d8bd60006aac64ca350b00da40aa6f/src/main.cpp#L216) The function 'myexit' is never used. (unusedFunction)
 - __style__: [src/main.cpp:158](../blob/64dd349e32d8bd60006aac64ca350b00da40aa6f/src/main.cpp#L158) The function 'throws_exception' is never used. (unusedFunction)


Yes,that is a bug and exists in several of the tools. For now, you'll have to comment out the parameters in order to specify the value as false.

John Fereira
Cornell University, Ithaca, NY

Sent from TypeMail

-------- Original Message --------
From: Ben <notifications@github.com>
Sent: Tue Oct 13 18:02:26 EDT 2015
To: vivo-project/VIVO-Harvester <VIVO-Harvester@noreply.github.com>
Subject: Re: [VIVO-Harvester] fix bug where all values (including 'false') in config was still treated as 'true' (only omitted parameter resulted in 'false') (874aeee)

I get an error from Match when trying to run the Harvest Person Data from CSV option in VIVO.
2015-10-13 15:53:47.666 DEBUG [o.v.h.u.a.ArgList] running Match
2015-10-13 15:53:47.669 DEBUG [o.v.h.u.a.ArgList] command line args: -i vivo/config/h2-sdb.xml -ImodelName=http://localhost/vivo/harvested-data -IdbUrl=jdbc:h2:/usr/local/vivo/harvester/vivo/harvested-data/csv/30FE126DFA5BFC23B376FC4B3D490754/score-data/match -r -t
[snip.....jenaconnect log..... snip]
2015-10-13 15:53:48.414 ERROR [o.v.h.s.Match] r has no parameters
2015-10-13 15:53:48.539 DEBUG [o.v.h.s.Match] Stacktrace:
java.lang.IllegalArgumentException: r has no parameters
        at org.vivoweb.harvester.util.args.ArgList.get(ArgList.java:177) ~[harvester.jar:na]
        at org.vivoweb.harvester.score.Match.<init>(Match.java:140) ~[harvester.jar:na]
        at org.vivoweb.harvester.score.Match.<init>(Match.java:119) ~[harvester.jar:na]
        at org.vivoweb.harvester.score.Match.main(Match.java:443) ~[harvester.jar:na]
2015-10-13 15:53:48.543 INFO  [o.v.h.s.Match] Match: End

If I try the prior commit, the script just hangs. Any ideas?

---
Reply to this email directly or view it on GitHub:
https://github.com/vivo-project/VIVO-Harvester/commit/874aeee1c22589d772ed65be0fbf3ce10aa7ff87#commitcomment-13753409


TeamCity OSS :: Kubernetes Mesos :: 5 - Smoke Tests (docker/mesos) [Build 743](https://teamcity.mesosphere.io/viewLog.html?buildId=58256&buildTypeId=Oss_KubernetesMesos_5SmokeTestsDockerMesos&guest=1) outcome was **FAILURE**
Summary: Exit code 1 Build time: 00:00:47


PHPCS: There must be one blank line after the last USE statement; 2 found;


add_examples (lefticus) - x86_64-Linux-Ubuntu-14.04-clang-3.5-LibC++: OK (376 of 376 tests passed)

![Build Badge](http://img.shields.io/badge/build%20status-warnings-yellow.svg) ![Test Badge](http://img.shields.io/badge/tests%20passed-100.0%25-green.svg)


Thank you for the suggestion. `base64` is part of GNU coreutils, so in future, I will be making adjustments so it is no longer necessary to prepare the assets beforehand.

    m4_esyscmd(`base64 assets/file.ogg')


nom nom nom


Method WorkerCommand::configure does not have a Docblock comment.


Method WorkerCommand::execute does not have a Docblock comment.


nnedi3.glsl

from include nn_weights_16.inc here was problem with long float values when complied shaders
```
const vec4 weights2[128] = vec4[](
...
vec4(-0.07507479609921575, -0.0408231639303267,  0.11597351497039199, -0.0844086431898176),
...
```


You spelled my last name right! Woohoo!


We're looking for the String.replace() method here.


Here's a version of the function we did in class today:

```javascript
function isPalindrome(str) {
  var char1 = "";
  var char2 = "";

  for (var i = 0; i < str.length; i += 1) {
    char1 = str.charAt(i);
    char2 = str.charAt(str.length - i - 1);
    if (char1 !== char2) {
      return false;
    }
  }

  return true;
}
```


Not only are these identical, but only allocated once

```
irb(main):007:0> pp RubyVM::InstructionSequence.compile('%w[a b c]').to_a
["YARVInstructionSequence/SimpleDataFormat",
 2,
 2,
 1,
 {:arg_size=>0, :local_size=>1, :stack_max=>3},
 "<compiled>",
 "<compiled>",
 nil,
 1,
 :top,
 [],
 {},
 [],
 [1,
  [:trace, 1],
  [:putstring, "a"],
  [:putstring, "b"],
  [:putstring, "c"],
  [:newarray, 3],
  [:leave]]]
=> ["YARVInstructionSequence/SimpleDataFormat", 2, 2, 1, {:arg_size=>0, :local_size=>1, :stack_max=>3}, "<compiled>", "<compiled>", nil, 1, :top, [], {}, [], [1, [:trace, 1], [:putstring, "a"], [:putstring, "b"], [:putstring, "c"], [:newarray, 3], [:leave]]]
irb(main):008:0> pp RubyVM::InstructionSequence.compile("['a', 'b', 'c']").to_a
["YARVInstructionSequence/SimpleDataFormat",
 2,
 2,
 1,
 {:arg_size=>0, :local_size=>1, :stack_max=>3},
 "<compiled>",
 "<compiled>",
 nil,
 1,
 :top,
 [],
 {},
 [],
 [1,
  [:trace, 1],
  [:putstring, "a"],
  [:putstring, "b"],
  [:putstring, "c"],
  [:newarray, 3],
  [:leave]]]
=> ["YARVInstructionSequence/SimpleDataFormat", 2, 2, 1, {:arg_size=>0, :local_size=>1, :stack_max=>3}, "<compiled>", "<compiled>", nil, 1, :top, [], {}, [], [1, [:trace, 1], [:putstring, "a"], [:putstring, "b"], [:putstring, "c"], [:newarray, 3], [:leave]]]
irb(main):009:0>
```


MEM REDUCTION!!!!!


i read it again, and think the function name is weird because it doesn't reflect what it does. I think i will just remove this helper function.


Don't use Fortran continues, you dummy.


@trueadm You should consider a solution like this to avoid hidden chars etc etc:
```
// http://www.w3.org/TR/css3-selectors/#whitespace
var whitespace = /[\x20\t\r\n\f]+/g<br>
result.replace( whitespace, ' ')
```


TeamCity OSS :: Kubernetes Mesos :: 5 - Smoke Tests (docker/mesos) [Build 744](https://teamcity.mesosphere.io/viewLog.html?buildId=58257&buildTypeId=Oss_KubernetesMesos_5SmokeTestsDockerMesos&guest=1) outcome was **SUCCESS**
Summary: Tests passed: 1, ignored: 190 Build time: 00:03:22


I believe this is him reporting that my attempt at resolving this bug had
unintended side effects.

Not certain why it would hang beforehand though.

--
Haines, Chris
On Oct 13, 2015 7:46 PM, "John Fereira" <notifications@github.com> wrote:

> Yes,that is a bug and exists in several of the tools. For now, you'll have
> to comment out the parameters in order to specify the value as false.
>
> John Fereira
> Cornell University, Ithaca, NY
>
> Sent from TypeMail
>
>
>
>
> -------- Original Message --------
> From: Ben <notifications@github.com>
> Sent: Tue Oct 13 18:02:26 EDT 2015
> To: vivo-project/VIVO-Harvester <VIVO-Harvester@noreply.github.com>
> Subject: Re: [VIVO-Harvester] fix bug where all values (including 'false')
> in config was still treated as 'true' (only omitted parameter resulted in
> 'false') (874aeee)
>
> I get an error from Match when trying to run the Harvest Person Data from
> CSV option in VIVO.
> 2015-10-13 15:53:47.666 DEBUG [o.v.h.u.a.ArgList] running Match
> 2015-10-13 15:53:47.669 DEBUG [o.v.h.u.a.ArgList] command line args: -i
> vivo/config/h2-sdb.xml -ImodelName=http://localhost/vivo/harvested-data
> -IdbUrl=jdbc:h2:/usr/local/vivo/harvester/vivo/harvested-data/csv/30FE126DFA5BFC23B376FC4B3D490754/score-data/match
> -r -t
> [snip.....jenaconnect log..... snip]
> 2015-10-13 15:53:48.414 ERROR [o.v.h.s.Match] r has no parameters
> 2015-10-13 15:53:48.539 DEBUG [o.v.h.s.Match] Stacktrace:
> java.lang.IllegalArgumentException: r has no parameters
> at org.vivoweb.harvester.util.args.ArgList.get(ArgList.java:177)
> ~[harvester.jar:na]
> at org.vivoweb.harvester.score.Match.<init>(Match.java:140)
> ~[harvester.jar:na]
> at org.vivoweb.harvester.score.Match.<init>(Match.java:119)
> ~[harvester.jar:na]
> at org.vivoweb.harvester.score.Match.main(Match.java:443)
> ~[harvester.jar:na]
> 2015-10-13 15:53:48.543 INFO [o.v.h.s.Match] Match: End
>
> If I try the prior commit, the script just hangs. Any ideas?
>
> ---
> Reply to this email directly or view it on GitHub:
>
> https://github.com/vivo-project/VIVO-Harvester/commit/874aeee1c22589d772ed65be0fbf3ce10aa7ff87#commitcomment-13753409
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/vivo-project/VIVO-Harvester/commit/874aeee1c22589d772ed65be0fbf3ce10aa7ff87#commitcomment-13754984>
> .
>


I think the root problem is `errorc` var name in `reportErr(err, p.errorc)` is not descriptive. I will clean it up later.


invert  condition


invert condition


Is this try catch needed?


The method startWorker() has a Cyclomatic Complexity of 13. The configured cyclomatic complexity threshold is 10.


The method startWorker() has an NPath complexity of 649. The configured NPath complexity threshold is 200.


Trailing spaces.


Not sure why this was placed here but best practice would be to place it in your stylesheet.


Given https://github.com/google/simian/blob/master/src/simian/mac/client/network_detect.py#L229

This will drastically help with readability:
```
  http_status, body = GetHttpResource(ip, redir=True)
  # existing comment
  if http_status == 200 and body and ('MiFi' in body or 'Jetpack' in body):
    ...
```


add_examples (lefticus) - i386-Windows-8.1-VisualStudio-12: OK (375 of 376 tests passed)

![Build Badge](http://img.shields.io/badge/build%20status-passing-green.svg) ![Test Badge](http://img.shields.io/badge/tests%20passed-99.73%25-yellow.svg)


Careful with inline styles. Although they are not technically wrong, best practice would be to put them in your stylesheet.


what.


add_examples (lefticus) - x86_64-Linux-Ubuntu-14.04-clang-3.6-AddressSanitizer: OK (376 of 376 tests passed)

![Build Badge](http://img.shields.io/badge/build%20status-warnings-yellow.svg) ![Test Badge](http://img.shields.io/badge/tests%20passed-100.0%25-green.svg)


I don't think we can search either, but we don't need to search. Clone the last commit and test the program with the two sample 128-line fastq files. In the fastq files, the header line (starts with "@HWI-") are the same across both reads except for the 1:N and 2:n part. The Splitter and Splicer functions read that and create/open the file based off of that header, ignoring the read number. See splitter.cpp, it works. No searching or sorting involved.


I'm wondering what the <document> root element is. In fact, I'm still trying to find a list of all the possible root elements.


all tests pass:
success: http://buildbot.bos1/builders/test-riak_cs/builds/1683


TeamCity OSS :: Kubernetes Mesos :: 5 - Smoke Tests (docker/mesos) [Build 603](https://teamcity.mesosphere.io/viewLog.html?buildId=57803&buildTypeId=Oss_KubernetesMesos_5SmokeTestsDockerMesos&guest=1) outcome was **SUCCESS**
Summary: Tests passed: 1, ignored: 189 Build time: 00:04:02


:+1: Good summary of mobile app


test second change


Webpage sample


Commit the .meteor directory too so I can run this


Please move this out of platform to drivers/clocksource and instantiate this using Device Tree.
We did the same thing for Abilis clock source driver - new clocksources shd do in drivers/clocksource - not in arch/*
I'm planning to remove init_time hook anyways since there is CLOCKSOURCE_DECLARE mechanism to start them anyways !


:+1: the extra reading is a good source


This looks Nice thanks !


Alrighty then. It outperforms every other bot in the 2K7 targeting challenge against fortune.


This seems to be unused.


Related ruby-prof's CallStackPrinter's output: https://rawgit.com/danielribeiro/dd925cb7ecc44d586850/raw/ProfileForCallStackPrinter.html


Living on the edge


I don't remember now where I saw it - it might have been in one of the Haas readings - but there was a comment about how moving down and to the right marked text progression. It left me wondering why that became the standard when there are languages that are read right to left.


On this project, the speedup is from (using time command line utility):

```
real	0m23.158s
user	0m19.550s
sys	0m3.379s
```

to:

```
real	0m13.979s
user	0m11.048s
sys	0m2.811s
```

Running with

`$ time be pod install --verbose --no-repo-update`


OK


Is it safe to continue here if the return is DB_NEED_REWRITE or DB_TOO_NEW?

Maybe better to only continue if we get DB_NONCRITICAL_ERROR specifically.


Always


Typo, should be OutputToJSON


heroku.com では Heroku で統一されているようなので、統一してみました。


fast-forwarding 2.0 to borshop-integration-1266-bugfix/gh1236-and-gh1263-backport = dd0bc895


You should mention the effects, benefits, and/or potential impact after the changes in GIT commit messages.


Yes. It means to import everything that was exported from local `doc-id` module (which in this case is just `./doc-id.jsx` could be `./doc-id.js`, `./doc-id/index.js` or whatever file it points to in "main" in `./doc-id/package.json`).

In `doc-id.jsx` it has `export { encode, decode }`, so `import * as docId from './doc-id'` will mean I can refer to `docId.encode` or `docId.decode`.


Do we even need this fFirstRun parameter? It seems to be ignored both places it is used.


You should install Git hooks to check coding style.


Well spotted.


Damn


`swap_fun` should be local and marked as "static".


Nevermind, I thought for a minute that this commit had made it into the official repo.


Can you automated the testing flow? That is, you can use another program, which generates randomized materials, as the input of your implementation for Question #2?


Please shorten your code.


这个是我之前做的jsp项目。


This commit integrates @lscheinkman's work on https://github.com/brev/numenta-apps/commit/92dcfa117941841b6e2e4f8b01c44084f2f4ad90 with my work on the same. Lints and fixes, more to go.


Para verlo funcionando puedes probar con Brackets.io


passed code review


Well I would still mix them, but yes. Any other ideas anyone?


Not completely sure why this is needed, but on OS X with JDK 1.6.0_65-b14-468-11M4833 I get the following compilation error with the previous commit of this:

```
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /Users/atolbert/Documents/Projects/java-driver/driver-core/src/main/java/com/datastax/driver/core/CodecRegistry.java:[314,27] incompatible types
found   : com.google.common.cache.CacheBuilder<java.lang.Object,java.lang.Object>
required: com.google.common.cache.CacheBuilder<com.datastax.driver.core.CodecRegistry.CacheKey,com.datastax.driver.core.TypeCodec<?>>
[INFO] 1 error
[INFO] -------------------------------------------------------------
```

Reversing maximumWeight and weigher gets rid of the compilation error.  This does not happen on linux.  Figured i'd change this anyways for compatibility reasons.


You should only have main() is you intend to run the class. Since you're creating a library, you shouldn't have any main() methods.


very good ,thank you!


LGTM :+1:


TeamCity OSS :: Kubernetes Mesos :: 5 - Smoke Tests (docker/mesos) [Build 604](https://teamcity.mesosphere.io/viewLog.html?buildId=57806&buildTypeId=Oss_KubernetesMesos_5SmokeTestsDockerMesos&guest=1) outcome was **SUCCESS**
Summary: Tests passed: 1, ignored: 189 Build time: 00:04:05


The statement `if (str && *str) {` looks cleaner.


Shouldn't it be?
```java
buffer.append(line);
buffer.append("\n");
```


Void --> void

That way you don't need to return null.


We are sure .
kernel-ich-gpio.patch  are used for Rangeley  Intel ICH6-10  GPIO.
kernel-igb.patch are used for Intel I210 chip


Is there `os_printf("<` part?


Since `tmp` is practically operated inside this scope, you can declare `char tmp` here.


En la parte de rutas aun no es funcional, tal vez alguien encuentre el error


`StringBuilder`?


You can safely remove the `else` here.


```ruby
def won?(board)
  WIN_COMBINATIONS.detect do |win|
    win.all? {|e| board[e] == 'X'} || win.all? {|e| board[e] == 'O'}
  end
end
```

would work too.


\r ?


`jobs@luxola.com`?


Can you introduce a generic testing system to validate both implementations by single testing "driver"? That is, you might refer to the function `main()` where you implemented in [phonebook](https://github.com/mimihalo/phonebook).


Maybe Just one comment `// External Interrupts` before `EV_EXTI0` ?


Should write this function in sessions_helper.rb


Klass isnt a very descriptive name. Long name NaiveBayesClassification are greatly preferable because I don't have to make any assumptions that this refers to a class of documents.

Also in this case "klass" is commonly used to name a variable of type Class. It's a bad pattern but very common.


After checking with our colleagues, the core script don't need to change  on  the two platform . We'll remove this file next pull request.


@mistercrunch:  I'm having some issues with the unit test.  It doesn't seem to be picking up the connection parameter.  I guess we can chat tomorrow about how to set this for testing.


should also handle 5xx series of status codes + some UI notification on POST success would be helpful


The algorithm itself can be improved a lot. Please read this article carefully: https://www.cigital.com/papers/download/developer_gambling.php


Delete this line


Its already live at http://ruby.sg/companies


move all reocurring functions into one JS to avoid code duplication


工作原理编辑
通常情况下，VPN网关采取双网卡结构，外网卡使用公网IP接入Internet。
网络一(假定为公网internet)的终端A访问网络二(假定为公司内网)的终端B，其发出的访问数据包的目标地址为终端B的内部IP地址。
网络二的VPN网关在接收到终端A发出的访问数据包时对其目标地址进行检查，如果目标地址属于网络二的地址，则将该数据包进行封装，封装的方式根据所采用的VPN技术不同而不同，同时VPN网关会构造一个新VPN数据包，并将封装后的原数据包作为VPN数据包的负载，VPN数据包的目标地址为网络二的VPN网关的外部地址。
网络二的VPN网关将VPN数据包发送到Internet，由于VPN数据包的目标地址是网络一的VPN网关的外部地址，所以该数据包将被Internet中的路由正确地发送到网络二的VPN网关。
网络二的VPN网关对接收到的数据包进行检查，如果发现该数据包是从网络一的VPN网关发出的，即可判定该数据包为VPN数据包，并对该数据包进行解包处理。解包的过程主要是先将VPN数据包的包头剥离，再将数据包反向处理还原成原始的数据包。
网络二的VPN网关将还原后的原始数据包发送至目标终端B，由于原始数据包的目标地址是终端B的IP，所以该数据包能够被正确地发送到终端B。在终端B看来，它收到的数据包就和从终端A直接发过来的一样。
从终端B返回终端A的数据包处理过程和上述过程一样，这样两个网络内的终端就可以相互通讯了。
通过上述说明可以发现，在VPN网关对数据包进行处理时，有两个参数对于VPN通讯十分重要：原始数据包的目标地址（VPN目标地址）和远程VPN网关地址。根据VPN目标地址，VPN网关能够判断对哪些数据包进行VPN处理，对于不需要处理的数据包通常情况下可直接转发到上级路由；远程VPN网关地址则指定了处理后的VPN数据包发送的目标地址，即VPN隧道的另一端VPN网关地址。由于网络通讯是双向的，在进行VPN通讯时，隧道两端的VPN网关都必须知道VPN目标地址和与此对应的远端VPN网关地址。
分类标准编辑
根据不同的划分标准，VPN可以按几个标准进行分类划分：
1、按VPN的协议分类：
VPN的隧道协议主要有三种，PPTP、L2TP和IPSec，其中PPTP和L2TP协议工作在OSI模型的第二层，又称为二层隧道协议；IPSec是第三层隧道协议。
2、按VPN的应用分类：
（1）Access VPN（远程接入VPN）：客户端到网关，使用公网作为骨干网在设备之间传输VPN数据流量；
（2）Intranet VPN（内联网VPN）：网关到网关，通过公司的网络架构连接来自同公司的资源；
（3）Extranet VPN（外联网VPN）：与合作伙伴企业网构成Extranet，将一个公司与另一个公司的资源进行连接。
3、按所用的设备类型进行分类：
网络设备提供商针对不同客户的需求，开发出不同的VPN网络设备，主要为交换机、路由器和防火墙：
（1）路由器式VPN：路由器式VPN部署较容易，只要在路由器上添加VPN服务即可；
（2）交换机式VPN：主要应用于连接用户较少的VPN网络；
（3）防火墙式VPN：防火墙式VPN是最常见的一种VPN的实现方式，许多厂商都提供这种配置类型
4．按照实现原理划分：
（1）重叠VPN：此VPN需要用户自己建立端节点之间的VPN链路，主要包括：GRE、L2TP、IPSec等众多技术。
（2）对等VPN：由网络运营商在主干网上完成VPN通道的建立，主要包括MPLS、VPN技术。
实现方式编辑
VPN的实现有很多种方法，常用的有以下四种：
1．VPN服务器：在大型局域网中，可以通过在网络中心搭建VPN服务器的方法实现VPN。
2．软件VPN：可以通过专用的软件实现VPN。
3．硬件VPN：可以通过专用的硬件实现VPN。
4．集成VPN：某些硬件设备，如路由器、防火墙等，都含有VPN功能，但是一般拥有VPN功能的硬件设备通常都比没有这一功能的要贵。
常用VPN技术编辑
1．MPLS VPN是一种基于MPLS技术的IP VPN，是在网络路由和交换设备上应用MPLS（Multiprotocol Label Switching，多协议标记交换）技术，简化核心路由器的路由选择方式，利用结合传统路由技术的标记交换实现的IP虚拟专用网络（IP VPN）。MPLS优势在于将二层交换和三层路由技术结合起来，在解决VPN、服务分类和流量工程这些IP网络的重大问题时具有很优异的表现。因此，MPLS VPN在解决企业互连、提供各种新业务方面也越来越被运营商看好，成为在IP网络运营商提供增值业务的重要手段。MPLS VPN又可分为二层MPLS VPN（即MPLS L2 VPN）和三层MPLS VPN（即MPLS L3 VPN）。
2．SSL VPN是以HTTPS（Secure HTTP，安全的HTTP，即支持SSL的HTTP协议）为基础的VPN技术，工作在传输层和应用层之间。SSL VPN充分利用了SSL协议提供的基于证书的身份认证、数据加密和消息完整性验证机制，可以为应用层之间的通信建立安全连接。SSL VPN广泛应用于基于Web的远程安全接入，为用户远程访问公司内部网络提供了安全保证。
3．IPSec VPN是基于IPSec协议的VPN技术，由IPSec协议提供隧道安全保障。IPSec是一种由IETF设计的端到端的确保基于IP通讯的数据安全性的机制。它为Internet上传输的数据提供了高质量的、可互操作的、基于密码学的安全保证。
常见问题编辑
错误691：提示“由于域上的用户名和/或密码无效而拒绝访问”
一般的原因是VPN连接时输入的账户和/或密码不正确，或是没有使用VPN服务的权限。
VPN一个账号默认仅限一台电脑使用，检查您的用户名有无登录重复。
若您是在使用的途中掉线了，不要急着再次连接，请耐心等待几分钟。
若还是提示错误，请联系网络管理员。
错误691：提示“端口已断开连接”
市面上有一小部分的路由器对VPN支持不好，从而引起错误691、只能连接几台机、经常掉线等多种问题，有时候还会出现错误800。原因是路由器采用NAT方式，不能让VPN协议穿透。
如果计算机中开启了系统防火墙，可以先关闭后再重试。
如果偶尔出现，重拨几次，或者重新启动计算机及路由器后再重试。
如果是通过局域网或者通过路由器上网的用户，请网络管理员在服务器或者路由器上打开UDP端口1701~1704。
如果路由器中不能设置，可以尝试将计算机直接连到外网，用单机拨号方式连接互联网，再重试VPN拨号。
部分网络如校园网、广电网、长城宽带、宽带通，容易出现691错误，需要与网络接入部门联系。
安装了简化版的操作系统容易缺少相关组件，可以下载安装错误691注册表文件。
错误721：提示“远程计算机没反应”
这种情况可能是网络延迟造成的，可以多连几次试试，如果还是不行，可以尝试以下解决方法：
单击“开始”，然后单击“运行”。
在“运行”中，键入regedit.exe，然后单击“确定”。
在注册表编辑器中，找到以下子项：HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002bE10318}/<000x>，其中<000x>是WAN微型端口（PPTP）驱动程序的网络适配器。
在“编辑”菜单上，指向“新建”，然后单击“DWORD 值”。
键入ValidateAddress，然后按 Enter。该值的默认设置为“1”（打开）；因此，您可以通过将其设置为“0”将其关闭。
退出注册表编辑器。
重新启动计算机。
错误742/741：提示“远程服务器不支持加密”
选择VPN连接，右键属性，点击安全。
在数据加密项选择“没有加密也可以连接”（Win7下点击网络共享中心—更改适配器—点击VPN连接图标—查看属性—安全数据加密—选择“没有加密也可以连接”）。
错误800：提示是“不能建立VPN连接，VPN服务器不能到达”
如果计算机中开启了系统防火墙，可以先关闭后再重试。
如果有安装路由器的用户，建议重启一下路由器。
部分网络如校园网、广电网、长城宽带、宽带通，容易出现800错误，需要与网络接入部门联系。
桌面右键单击“我的电脑”或“计算机”，打开“管理”，在“服务和应用程序”中，点击“服务”，找到“IPsec Policy Agent”服务，检查有没有禁用该服务。如果为禁用状态则改为自动状态，启动该服务。
错误619
如果打开了防火墙（包括系统自带的）：关闭防火墙，或者设置防火墙允许UDP 1701端口。
使用路由器上网：不使用路由器，或者映射UDP 1701端口。
如果无以上两种现象存在，但是还出现619错误：关闭所有正在使用网络的软件，重新启动计算机然后重新进行连接。
连上国外VPN后打开国内网页速度很慢
因为连接上了VPN的国外线路，本地网络出口已经变更为了国家带宽出口，因此在连接VPN的状态下访问国内的网页速度是比较慢的，可简单理解成：因为线路的传输需要从国内到国外，再从国外返回国内。而如果是访问国外网页的话，此时线路方式从国内直接传输到国外是相对最快的。而且还取决于您所选的线路距离，如果您选择的是美国的线路，那么访问国内的网页肯定较慢。
移动终端连接不上
当前网络是3G网络：3G网络通常都不稳定，不保证每次都可以连接上。
如果正在办公室使用公司的无线网络但连不上VPN或发生无法响应PPTP服务器错误：请详细咨询相关人员所处的网络宽带服务商是否支持VPN，其次看所处的网络路由器是否禁止了VPN端口。
电脑上可以连接VPN，但手机就不行：请确认电脑中的VPN是否处于“正在连接”的状态，如果是，请先断开电脑中的，再次连接手机试试。请注意一个账号不能同时登录在两个设备中。
错误789
连接尝试失败，因为安全层在初始化与远程计算机的协商时遇到一个处理错误
1. 单击“开始”，单击“运行”，键入“regedit”，然后单击“确定”
2. 找到下面的注册表子项，然后单击它：
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters
3. 在“编辑”菜单上，单击“新建”->“DWORD值”
4. 在“名称”框中，键入“ProhibitIpSec”
5. 在“数值数据”框中，键入“1”，然后单击“确定”
6. 退出注册表编辑器，然后重新启动计算机
评价编辑
优点

VPN能够让移动员工、远程员工、商务合作伙伴和其他人利用本地可用的高速宽带网连接（如DSL、有线电视或者WiFi网络）连接到企业网络。此外，高速宽带网连接提供一种成本效率高的连接远程办公室的方法。
设计良好的宽带VPN是模块化的和可升级的。VPN能够让应用者使用一种很容易设置的互联网基础设施，让新的用户迅速和轻松地添加到这个网络。这种能力意味着企业不用增加额外的基础设施就可以提供大量的容量和应用。
VPN能提供高水平的安全，使用高级的加密和身份识别协议保护数据避免受到窥探，阻止数据窃贼和其他非授权用户接触这种数据。
完全控制，虚拟专用网使用户可以利用ISP的设施和服务，同时又完全掌握着自己网络的控制权。用户只利用ISP提供的网络资源，对于其它的安全设置、网络管理变化可由自己管理。在企业内部也可以自己建立虚拟专用网。
缺点

企业不能直接控制基于互联网的VPN的可靠性和性能。机构必须依靠提供VPN的互联网服务提供商保证服务的运行。这个因素使企业与互联网服务提供商签署一个服务级协议非常重要，要签署一个保证各种性能指标的协议。
企业创建和部署VPN线路并不容易。这种技术需要高水平地理解网络和安全问题，需要认真的规划和配置。因此，选择互联网服务提供商负责运行VPN的大多数事情是一个好主意。
不同厂商的VPN产品和解决方案总是不兼容的，因为许多厂商不愿意或者不能遵守VPN技术标准。因此，混合使用不同厂商的产品可能会出现技术问题。另一方面，使用一家供应商的设备可能会提高成本。
当使用无线设备时，VPN有安全风险。在接入点之间漫游特别容易出问题。当用户在接入点之间漫游的时候，任何使用高级加密技术的解决方案都可能被攻破。
各个系统下VPN的登陆配置编辑
Windows XP

建立一个新连接；
选择“连接到我工作的地方的网络”；
选择“虚拟专用网络连接”；
设定连接名称（例如：VPN）；
输入主机名称或公网IP地址；
完成新增连接，勾选“将这个连接的快捷方式加到我的桌面”（以便日后连接）；
输入账号，密码，即可连接。
Windows 7

在画面右下角，点选网络连接，然后选择“打开网络共享中心”；
在弹出的对话窗口中，选择“设置新的连接或网络”；
选择“连接到工作区”，然后选择“使用我的Internet连接（VPN），通过Internet使用虚拟专用网络（VPN）来连接”，然后单击“我将稍后设置Internet连接”；
在“Internet 地址”里，填上VPN提供的IP地址。填好IP后，其它东西都不用管它，直接点击下一步。目标名称填写“VPN连接”；
填VPN的用户名和密码，先不要填，点“创建”；
到这里就完成的连接设置导向。点击“关闭”。；
回到桌面右键点击“网络”->“属性”，再点击一下左边的“更改适配器设置”；
找到刚才建好的“VPN连接”并双击打开；
填写提供的VPN用户名和密码，“域”可以不用填写。然后点击属性->安全；
在“数据加密”这一项选中“可选加密（没有加密也可以连接）”选好后点击“确定”。VPN类型自动，使用这些协议选择CHAP，MS-CHAP v2；
整个Windows7 VPN过程都设置完成了。点击“连接”就可以了。
Ubuntu

1.画面右上角最右端图标单击，选择“系统设置”
2.选择“网络”，选择添加网络，接口VPN，创建。
Android

打开手机主菜单，选择“设置”；
选择“无线和网络”；
选择“虚拟专用网设置”；
选择“添加虚拟专用网”；
选择PPTP方式；
输入虚拟专用网名称（如VPN）；
填写服务器域名，点击“确定”。然后按menu键，保存设置；
点击打开刚刚建好的连接，填写用户名和密码，点击“连接”。
iOS

点击桌面上的“设置”图标进入设置；
点击“通用”进入通用设置；
点击“网络”，进入网络设置；
点击“VPN”进入设置；
点击“添加VPN配置”；
在协议类型上选择“PPTP”，在“描述”栏中填入“VPN”，在服务器栏中填入服务器域名，在账户和密码栏中填入用户名和密码，其他设置保持不变，然后点击“存储”。；
点击“VPN”开关，就会开启连接，连接成功后，右上角会出现小图标。
OS X

从任务栏菜单打开系统设置，选择“网络”；
在新对话框中选择“添加”，然后从下拉菜单选择“VPN”；
从VPN类型下拉菜单中选择PPTP。填写服务名称，点击“创建”按钮；
在配置下拉菜单中选择“增加配置”；
填写服务器地址，用户名；
点击“认证配置”按钮，在弹出的对话框中选择“密码”单选框，并输入密码；
回到主设置框，点击“应用”保存设置即可。
相关法律法规编辑
2003年4月，信息产业部颁发了《电信业务分类目录》，取消了国际电信业务的分类，同时将虚拟专用网业务自基础电信业务中分离出来，成为独立的增值电信业务分类。但是此处的“虚拟专用网”概念与行业内的VPN业务是不一样的。新的《电信业务分类目录》中对该分类的解释是：国内因特网虚拟专用网业务（IP-VPN）是指经营者利用自有的或租用公用因特网网络资源，采用TCP/IP协议，为国内用户定制因特网闭合用户群网络的服务。这种分类的解释强调了两个特点，一个是利用因特网网络资源，一个是采用TCP/IP协议。这种解释是与当时的市场状况所对应的，当时关注的是基于互连网的IPSec VPN，虽然该解释可以基本涵盖后出现的SSL VPN模式，但并没有关注MPLS VPN。
2003年8月，信息产业部发布《关于组织开展国内多方通信服务等三项电信业务商用试验的通知》，就“国内多方通信服务业务”、“在线数据处理与交易处理业务”、“国内因特网虚拟专用网业务”等三项增值电信业务组织开展商用试验，有效期至2004年8月底。
2004年11月，信息产业部发布《关于继续开展国内多方通信服务等三项增值电信业务商用试验的通告》，决定将以上三项增值电信业务商用试验期延长一年，至2005年8月31日。
2006年1月，信息产业部发布《关于两项增值电信业务及国内多方通信服务的通告》，正式开放“国内因特网虚拟专用网业务”和“在线数据处理与交易处理业务”两项增值电信业务，上述两项增值电信业务由商用试验转为正式商用。
2008年，正式颁发IP-VPN业务牌照。名为IPSec VPN的中国“国内因特网虚拟专用网”增值电信业务许可证自其诞生之日起即以MPLS VPN为发展方向，导致VPN市场无规可循，实际上是在“灰色运营”。
2013年，工业与信息化部公布的《电信业务分类目录（征求意见稿）》中仍然没有对此作出任何改变。
2015年1月27日，工信部回应VPN被封事件，表示一些不良信息应该按照中国法律进行管理。[1]
工信部此前发布规定，在中国提供VPN服务的公司必须登记注册，否则将“不会受到中国法律的保护”工作原理编辑
通常情况下，VPN网关采取双网卡结构，外网卡使用公网IP接入Internet。
网络一(假定为公网internet)的终端A访问网络二(假定为公司内网)的终端B，其发出的访问数据包的目标地址为终端B的内部IP地址。
网络二的VPN网关在接收到终端A发出的访问数据包时对其目标地址进行检查，如果目标地址属于网络二的地址，则将该数据包进行封装，封装的方式根据所采用的VPN技术不同而不同，同时VPN网关会构造一个新VPN数据包，并将封装后的原数据包作为VPN数据包的负载，VPN数据包的目标地址为网络二的VPN网关的外部地址。
网络二的VPN网关将VPN数据包发送到Internet，由于VPN数据包的目标地址是网络一的VPN网关的外部地址，所以该数据包将被Internet中的路由正确地发送到网络二的VPN网关。
网络二的VPN网关对接收到的数据包进行检查，如果发现该数据包是从网络一的VPN网关发出的，即可判定该数据包为VPN数据包，并对该数据包进行解包处理。解包的过程主要是先将VPN数据包的包头剥离，再将数据包反向处理还原成原始的数据包。
网络二的VPN网关将还原后的原始数据包发送至目标终端B，由于原始数据包的目标地址是终端B的IP，所以该数据包能够被正确地发送到终端B。在终端B看来，它收到的数据包就和从终端A直接发过来的一样。
从终端B返回终端A的数据包处理过程和上述过程一样，这样两个网络内的终端就可以相互通讯了。
通过上述说明可以发现，在VPN网关对数据包进行处理时，有两个参数对于VPN通讯十分重要：原始数据包的目标地址（VPN目标地址）和远程VPN网关地址。根据VPN目标地址，VPN网关能够判断对哪些数据包进行VPN处理，对于不需要处理的数据包通常情况下可直接转发到上级路由；远程VPN网关地址则指定了处理后的VPN数据包发送的目标地址，即VPN隧道的另一端VPN网关地址。由于网络通讯是双向的，在进行VPN通讯时，隧道两端的VPN网关都必须知道VPN目标地址和与此对应的远端VPN网关地址。
分类标准编辑
根据不同的划分标准，VPN可以按几个标准进行分类划分：
1、按VPN的协议分类：
VPN的隧道协议主要有三种，PPTP、L2TP和IPSec，其中PPTP和L2TP协议工作在OSI模型的第二层，又称为二层隧道协议；IPSec是第三层隧道协议。
2、按VPN的应用分类：
（1）Access VPN（远程接入VPN）：客户端到网关，使用公网作为骨干网在设备之间传输VPN数据流量；
（2）Intranet VPN（内联网VPN）：网关到网关，通过公司的网络架构连接来自同公司的资源；
（3）Extranet VPN（外联网VPN）：与合作伙伴企业网构成Extranet，将一个公司与另一个公司的资源进行连接。
3、按所用的设备类型进行分类：
网络设备提供商针对不同客户的需求，开发出不同的VPN网络设备，主要为交换机、路由器和防火墙：
（1）路由器式VPN：路由器式VPN部署较容易，只要在路由器上添加VPN服务即可；
（2）交换机式VPN：主要应用于连接用户较少的VPN网络；
（3）防火墙式VPN：防火墙式VPN是最常见的一种VPN的实现方式，许多厂商都提供这种配置类型
4．按照实现原理划分：
（1）重叠VPN：此VPN需要用户自己建立端节点之间的VPN链路，主要包括：GRE、L2TP、IPSec等众多技术。
（2）对等VPN：由网络运营商在主干网上完成VPN通道的建立，主要包括MPLS、VPN技术。
实现方式编辑
VPN的实现有很多种方法，常用的有以下四种：
1．VPN服务器：在大型局域网中，可以通过在网络中心搭建VPN服务器的方法实现VPN。
2．软件VPN：可以通过专用的软件实现VPN。
3．硬件VPN：可以通过专用的硬件实现VPN。
4．集成VPN：某些硬件设备，如路由器、防火墙等，都含有VPN功能，但是一般拥有VPN功能的硬件设备通常都比没有这一功能的要贵。
常用VPN技术编辑
1．MPLS VPN是一种基于MPLS技术的IP VPN，是在网络路由和交换设备上应用MPLS（Multiprotocol Label Switching，多协议标记交换）技术，简化核心路由器的路由选择方式，利用结合传统路由技术的标记交换实现的IP虚拟专用网络（IP VPN）。MPLS优势在于将二层交换和三层路由技术结合起来，在解决VPN、服务分类和流量工程这些IP网络的重大问题时具有很优异的表现。因此，MPLS VPN在解决企业互连、提供各种新业务方面也越来越被运营商看好，成为在IP网络运营商提供增值业务的重要手段。MPLS VPN又可分为二层MPLS VPN（即MPLS L2 VPN）和三层MPLS VPN（即MPLS L3 VPN）。
2．SSL VPN是以HTTPS（Secure HTTP，安全的HTTP，即支持SSL的HTTP协议）为基础的VPN技术，工作在传输层和应用层之间。SSL VPN充分利用了SSL协议提供的基于证书的身份认证、数据加密和消息完整性验证机制，可以为应用层之间的通信建立安全连接。SSL VPN广泛应用于基于Web的远程安全接入，为用户远程访问公司内部网络提供了安全保证。
3．IPSec VPN是基于IPSec协议的VPN技术，由IPSec协议提供隧道安全保障。IPSec是一种由IETF设计的端到端的确保基于IP通讯的数据安全性的机制。它为Internet上传输的数据提供了高质量的、可互操作的、基于密码学的安全保证。
常见问题编辑
错误691：提示“由于域上的用户名和/或密码无效而拒绝访问”
一般的原因是VPN连接时输入的账户和/或密码不正确，或是没有使用VPN服务的权限。
VPN一个账号默认仅限一台电脑使用，检查您的用户名有无登录重复。
若您是在使用的途中掉线了，不要急着再次连接，请耐心等待几分钟。
若还是提示错误，请联系网络管理员。
错误691：提示“端口已断开连接”
市面上有一小部分的路由器对VPN支持不好，从而引起错误691、只能连接几台机、经常掉线等多种问题，有时候还会出现错误800。原因是路由器采用NAT方式，不能让VPN协议穿透。
如果计算机中开启了系统防火墙，可以先关闭后再重试。
如果偶尔出现，重拨几次，或者重新启动计算机及路由器后再重试。
如果是通过局域网或者通过路由器上网的用户，请网络管理员在服务器或者路由器上打开UDP端口1701~1704。
如果路由器中不能设置，可以尝试将计算机直接连到外网，用单机拨号方式连接互联网，再重试VPN拨号。
部分网络如校园网、广电网、长城宽带、宽带通，容易出现691错误，需要与网络接入部门联系。
安装了简化版的操作系统容易缺少相关组件，可以下载安装错误691注册表文件。
错误721：提示“远程计算机没反应”
这种情况可能是网络延迟造成的，可以多连几次试试，如果还是不行，可以尝试以下解决方法：
单击“开始”，然后单击“运行”。
在“运行”中，键入regedit.exe，然后单击“确定”。
在注册表编辑器中，找到以下子项：HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002bE10318}/<000x>，其中<000x>是WAN微型端口（PPTP）驱动程序的网络适配器。
在“编辑”菜单上，指向“新建”，然后单击“DWORD 值”。
键入ValidateAddress，然后按 Enter。该值的默认设置为“1”（打开）；因此，您可以通过将其设置为“0”将其关闭。
退出注册表编辑器。
重新启动计算机。
错误742/741：提示“远程服务器不支持加密”
选择VPN连接，右键属性，点击安全。
在数据加密项选择“没有加密也可以连接”（Win7下点击网络共享中心—更改适配器—点击VPN连接图标—查看属性—安全数据加密—选择“没有加密也可以连接”）。
错误800：提示是“不能建立VPN连接，VPN服务器不能到达”
如果计算机中开启了系统防火墙，可以先关闭后再重试。
如果有安装路由器的用户，建议重启一下路由器。
部分网络如校园网、广电网、长城宽带、宽带通，容易出现800错误，需要与网络接入部门联系。
桌面右键单击“我的电脑”或“计算机”，打开“管理”，在“服务和应用程序”中，点击“服务”，找到“IPsec Policy Agent”服务，检查有没有禁用该服务。如果为禁用状态则改为自动状态，启动该服务。
错误619
如果打开了防火墙（包括系统自带的）：关闭防火墙，或者设置防火墙允许UDP 1701端口。
使用路由器上网：不使用路由器，或者映射UDP 1701端口。
如果无以上两种现象存在，但是还出现619错误：关闭所有正在使用网络的软件，重新启动计算机然后重新进行连接。
连上国外VPN后打开国内网页速度很慢
因为连接上了VPN的国外线路，本地网络出口已经变更为了国家带宽出口，因此在连接VPN的状态下访问国内的网页速度是比较慢的，可简单理解成：因为线路的传输需要从国内到国外，再从国外返回国内。而如果是访问国外网页的话，此时线路方式从国内直接传输到国外是相对最快的。而且还取决于您所选的线路距离，如果您选择的是美国的线路，那么访问国内的网页肯定较慢。
移动终端连接不上
当前网络是3G网络：3G网络通常都不稳定，不保证每次都可以连接上。
如果正在办公室使用公司的无线网络但连不上VPN或发生无法响应PPTP服务器错误：请详细咨询相关人员所处的网络宽带服务商是否支持VPN，其次看所处的网络路由器是否禁止了VPN端口。
电脑上可以连接VPN，但手机就不行：请确认电脑中的VPN是否处于“正在连接”的状态，如果是，请先断开电脑中的，再次连接手机试试。请注意一个账号不能同时登录在两个设备中。
错误789
连接尝试失败，因为安全层在初始化与远程计算机的协商时遇到一个处理错误
1. 单击“开始”，单击“运行”，键入“regedit”，然后单击“确定”
2. 找到下面的注册表子项，然后单击它：
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters
3. 在“编辑”菜单上，单击“新建”->“DWORD值”
4. 在“名称”框中，键入“ProhibitIpSec”
5. 在“数值数据”框中，键入“1”，然后单击“确定”
6. 退出注册表编辑器，然后重新启动计算机
评价编辑
优点

VPN能够让移动员工、远程员工、商务合作伙伴和其他人利用本地可用的高速宽带网连接（如DSL、有线电视或者WiFi网络）连接到企业网络。此外，高速宽带网连接提供一种成本效率高的连接远程办公室的方法。
设计良好的宽带VPN是模块化的和可升级的。VPN能够让应用者使用一种很容易设置的互联网基础设施，让新的用户迅速和轻松地添加到这个网络。这种能力意味着企业不用增加额外的基础设施就可以提供大量的容量和应用。
VPN能提供高水平的安全，使用高级的加密和身份识别协议保护数据避免受到窥探，阻止数据窃贼和其他非授权用户接触这种数据。
完全控制，虚拟专用网使用户可以利用ISP的设施和服务，同时又完全掌握着自己网络的控制权。用户只利用ISP提供的网络资源，对于其它的安全设置、网络管理变化可由自己管理。在企业内部也可以自己建立虚拟专用网。
缺点

企业不能直接控制基于互联网的VPN的可靠性和性能。机构必须依靠提供VPN的互联网服务提供商保证服务的运行。这个因素使企业与互联网服务提供商签署一个服务级协议非常重要，要签署一个保证各种性能指标的协议。
企业创建和部署VPN线路并不容易。这种技术需要高水平地理解网络和安全问题，需要认真的规划和配置。因此，选择互联网服务提供商负责运行VPN的大多数事情是一个好主意。
不同厂商的VPN产品和解决方案总是不兼容的，因为许多厂商不愿意或者不能遵守VPN技术标准。因此，混合使用不同厂商的产品可能会出现技术问题。另一方面，使用一家供应商的设备可能会提高成本。
当使用无线设备时，VPN有安全风险。在接入点之间漫游特别容易出问题。当用户在接入点之间漫游的时候，任何使用高级加密技术的解决方案都可能被攻破。
各个系统下VPN的登陆配置编辑
Windows XP

建立一个新连接；
选择“连接到我工作的地方的网络”；
选择“虚拟专用网络连接”；
设定连接名称（例如：VPN）；
输入主机名称或公网IP地址；
完成新增连接，勾选“将这个连接的快捷方式加到我的桌面”（以便日后连接）；
输入账号，密码，即可连接。
Windows 7

在画面右下角，点选网络连接，然后选择“打开网络共享中心”；
在弹出的对话窗口中，选择“设置新的连接或网络”；
选择“连接到工作区”，然后选择“使用我的Internet连接（VPN），通过Internet使用虚拟专用网络（VPN）来连接”，然后单击“我将稍后设置Internet连接”；
在“Internet 地址”里，填上VPN提供的IP地址。填好IP后，其它东西都不用管它，直接点击下一步。目标名称填写“VPN连接”；
填VPN的用户名和密码，先不要填，点“创建”；
到这里就完成的连接设置导向。点击“关闭”。；
回到桌面右键点击“网络”->“属性”，再点击一下左边的“更改适配器设置”；
找到刚才建好的“VPN连接”并双击打开；
填写提供的VPN用户名和密码，“域”可以不用填写。然后点击属性->安全；
在“数据加密”这一项选中“可选加密（没有加密也可以连接）”选好后点击“确定”。VPN类型自动，使用这些协议选择CHAP，MS-CHAP v2；
整个Windows7 VPN过程都设置完成了。点击“连接”就可以了。
Ubuntu

1.画面右上角最右端图标单击，选择“系统设置”
2.选择“网络”，选择添加网络，接口VPN，创建。
Android

打开手机主菜单，选择“设置”；
选择“无线和网络”；
选择“虚拟专用网设置”；
选择“添加虚拟专用网”；
选择PPTP方式；
输入虚拟专用网名称（如VPN）；
填写服务器域名，点击“确定”。然后按menu键，保存设置；
点击打开刚刚建好的连接，填写用户名和密码，点击“连接”。
iOS

点击桌面上的“设置”图标进入设置；
点击“通用”进入通用设置；
点击“网络”，进入网络设置；
点击“VPN”进入设置；
点击“添加VPN配置”；
在协议类型上选择“PPTP”，在“描述”栏中填入“VPN”，在服务器栏中填入服务器域名，在账户和密码栏中填入用户名和密码，其他设置保持不变，然后点击“存储”。；
点击“VPN”开关，就会开启连接，连接成功后，右上角会出现小图标。
OS X

从任务栏菜单打开系统设置，选择“网络”；
在新对话框中选择“添加”，然后从下拉菜单选择“VPN”；
从VPN类型下拉菜单中选择PPTP。填写服务名称，点击“创建”按钮；
在配置下拉菜单中选择“增加配置”；
填写服务器地址，用户名；
点击“认证配置”按钮，在弹出的对话框中选择“密码”单选框，并输入密码；
回到主设置框，点击“应用”保存设置即可。
相关法律法规编辑
2003年4月，信息产业部颁发了《电信业务分类目录》，取消了国际电信业务的分类，同时将虚拟专用网业务自基础电信业务中分离出来，成为独立的增值电信业务分类。但是此处的“虚拟专用网”概念与行业内的VPN业务是不一样的。新的《电信业务分类目录》中对该分类的解释是：国内因特网虚拟专用网业务（IP-VPN）是指经营者利用自有的或租用公用因特网网络资源，采用TCP/IP协议，为国内用户定制因特网闭合用户群网络的服务。这种分类的解释强调了两个特点，一个是利用因特网网络资源，一个是采用TCP/IP协议。这种解释是与当时的市场状况所对应的，当时关注的是基于互连网的IPSec VPN，虽然该解释可以基本涵盖后出现的SSL VPN模式，但并没有关注MPLS VPN。
2003年8月，信息产业部发布《关于组织开展国内多方通信服务等三项电信业务商用试验的通知》，就“国内多方通信服务业务”、“在线数据处理与交易处理业务”、“国内因特网虚拟专用网业务”等三项增值电信业务组织开展商用试验，有效期至2004年8月底。
2004年11月，信息产业部发布《关于继续开展国内多方通信服务等三项增值电信业务商用试验的通告》，决定将以上三项增值电信业务商用试验期延长一年，至2005年8月31日。
2006年1月，信息产业部发布《关于两项增值电信业务及国内多方通信服务的通告》，正式开放“国内因特网虚拟专用网业务”和“在线数据处理与交易处理业务”两项增值电信业务，上述两项增值电信业务由商用试验转为正式商用。
2008年，正式颁发IP-VPN业务牌照。名为IPSec VPN的中国“国内因特网虚拟专用网”增值电信业务许可证自其诞生之日起即以MPLS VPN为发展方向，导致VPN市场无规可循，实际上是在“灰色运营”。
2013年，工业与信息化部公布的《电信业务分类目录（征求意见稿）》中仍然没有对此作出任何改变。
2015年1月27日，工信部回应VPN被封事件，表示一些不良信息应该按照中国法律进行管理。[1]
工信部此前发布规定，在中国提供VPN服务的公司必须登记注册，否则将“不会受到中国法律的保护”工作原理编辑
通常情况下，VPN网关采取双网卡结构，外网卡使用公网IP接入Internet。
网络一(假定为公网internet)的终端A访问网络二(假定为公司内网)的终端B，其发出的访问数据包的目标地址为终端B的内部IP地址。
网络二的VPN网关在接收到终端A发出的访问数据包时对其目标地址进行检查，如果目标地址属于网络二的地址，则将该数据包进行封装，封装的方式根据所采用的VPN技术不同而不同，同时VPN网关会构造一个新VPN数据包，并将封装后的原数据包作为VPN数据包的负载，VPN数据包的目标地址为网络二的VPN网关的外部地址。
网络二的VPN网关将VPN数据包发送到Internet，由于VPN数据包的目标地址是网络一的VPN网关的外部地址，所以该数据包将被Internet中的路由正确地发送到网络二的VPN网关。
网络二的VPN网关对接收到的数据包进行检查，如果发现该数据包是从网络一的VPN网关发出的，即可判定该数据包为VPN数据包，并对该数据包进行解包处理。解包的过程主要是先将VPN数据包的包头剥离，再将数据包反向处理还原成原始的数据包。
网络二的VPN网关将还原后的原始数据包发送至目标终端B，由于原始数据包的目标地址是终端B的IP，所以该数据包能够被正确地发送到终端B。在终端B看来，它收到的数据包就和从终端A直接发过来的一样。
从终端B返回终端A的数据包处理过程和上述过程一样，这样两个网络内的终端就可以相互通讯了。
通过上述说明可以发现，在VPN网关对数据包进行处理时，有两个参数对于VPN通讯十分重要：原始数据包的目标地址（VPN目标地址）和远程VPN网关地址。根据VPN目标地址，VPN网关能够判断对哪些数据包进行VPN处理，对于不需要处理的数据包通常情况下可直接转发到上级路由；远程VPN网关地址则指定了处理后的VPN数据包发送的目标地址，即VPN隧道的另一端VPN网关地址。由于网络通讯是双向的，在进行VPN通讯时，隧道两端的VPN网关都必须知道VPN目标地址和与此对应的远端VPN网关地址。
分类标准编辑
根据不同的划分标准，VPN可以按几个标准进行分类划分：
1、按VPN的协议分类：
VPN的隧道协议主要有三种，PPTP、L2TP和IPSec，其中PPTP和L2TP协议工作在OSI模型的第二层，又称为二层隧道协议；IPSec是第三层隧道协议。
2、按VPN的应用分类：
（1）Access VPN（远程接入VPN）：客户端到网关，使用公网作为骨干网在设备之间传输VPN数据流量；
（2）Intranet VPN（内联网VPN）：网关到网关，通过公司的网络架构连接来自同公司的资源；
（3）Extranet VPN（外联网VPN）：与合作伙伴企业网构成Extranet，将一个公司与另一个公司的资源进行连接。
3、按所用的设备类型进行分类：
网络设备提供商针对不同客户的需求，开发出不同的VPN网络设备，主要为交换机、路由器和防火墙：
（1）路由器式VPN：路由器式VPN部署较容易，只要在路由器上添加VPN服务即可；
（2）交换机式VPN：主要应用于连接用户较少的VPN网络；
（3）防火墙式VPN：防火墙式VPN是最常见的一种VPN的实现方式，许多厂商都提供这种配置类型
4．按照实现原理划分：
（1）重叠VPN：此VPN需要用户自己建立端节点之间的VPN链路，主要包括：GRE、L2TP、IPSec等众多技术。
（2）对等VPN：由网络运营商在主干网上完成VPN通道的建立，主要包括MPLS、VPN技术。
实现方式编辑
VPN的实现有很多种方法，常用的有以下四种：
1．VPN服务器：在大型局域网中，可以通过在网络中心搭建VPN服务器的方法实现VPN。
2．软件VPN：可以通过专用的软件实现VPN。
3．硬件VPN：可以通过专用的硬件实现VPN。
4．集成VPN：某些硬件设备，如路由器、防火墙等，都含有VPN功能，但是一般拥有VPN功能的硬件设备通常都比没有这一功能的要贵。
常用VPN技术编辑
1．MPLS VPN是一种基于MPLS技术的IP VPN，是在网络路由和交换设备上应用MPLS（Multiprotocol Label Switching，多协议标记交换）技术，简化核心路由器的路由选择方式，利用结合传统路由技术的标记交换实现的IP虚拟专用网络（IP VPN）。MPLS优势在于将二层交换和三层路由技术结合起来，在解决VPN、服务分类和流量工程这些IP网络的重大问题时具有很优异的表现。因此，MPLS VPN在解决企业互连、提供各种新业务方面也越来越被运营商看好，成为在IP网络运营商提供增值业务的重要手段。MPLS VPN又可分为二层MPLS VPN（即MPLS L2 VPN）和三层MPLS VPN（即MPLS L3 VPN）。
2．SSL VPN是以HTTPS（Secure HTTP，安全的HTTP，即支持SSL的HTTP协议）为基础的VPN技术，工作在传输层和应用层之间。SSL VPN充分利用了SSL协议提供的基于证书的身份认证、数据加密和消息完整性验证机制，可以为应用层之间的通信建立安全连接。SSL VPN广泛应用于基于Web的远程安全接入，为用户远程访问公司内部网络提供了安全保证。
3．IPSec VPN是基于IPSec协议的VPN技术，由IPSec协议提供隧道安全保障。IPSec是一种由IETF设计的端到端的确保基于IP通讯的数据安全性的机制。它为Internet上传输的数据提供了高质量的、可互操作的、基于密码学的安全保证。
常见问题编辑
错误691：提示“由于域上的用户名和/或密码无效而拒绝访问”
一般的原因是VPN连接时输入的账户和/或密码不正确，或是没有使用VPN服务的权限。
VPN一个账号默认仅限一台电脑使用，检查您的用户名有无登录重复。
若您是在使用的途中掉线了，不要急着再次连接，请耐心等待几分钟。
若还是提示错误，请联系网络管理员。
错误691：提示“端口已断开连接”
市面上有一小部分的路由器对VPN支持不好，从而引起错误691、只能连接几台机、经常掉线等多种问题，有时候还会出现错误800。原因是路由器采用NAT方式，不能让VPN协议穿透。
如果计算机中开启了系统防火墙，可以先关闭后再重试。
如果偶尔出现，重拨几次，或者重新启动计算机及路由器后再重试。
如果是通过局域网或者通过路由器上网的用户，请网络管理员在服务器或者路由器上打开UDP端口1701~1704。
如果路由器中不能设置，可以尝试将计算机直接连到外网，用单机拨号方式连接互联网，再重试VPN拨号。
部分网络如校园网、广电网、长城宽带、宽带通，容易出现691错误，需要与网络接入部门联系。
安装了简化版的操作系统容易缺少相关组件，可以下载安装错误691注册表文件。
错误721：提示“远程计算机没反应”
这种情况可能是网络延迟造成的，可以多连几次试试，如果还是不行，可以尝试以下解决方法：
单击“开始”，然后单击“运行”。
在“运行”中，键入regedit.exe，然后单击“确定”。
在注册表编辑器中，找到以下子项：HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002bE10318}/<000x>，其中<000x>是WAN微型端口（PPTP）驱动程序的网络适配器。
在“编辑”菜单上，指向“新建”，然后单击“DWORD 值”。
键入ValidateAddress，然后按 Enter。该值的默认设置为“1”（打开）；因此，您可以通过将其设置为“0”将其关闭。
退出注册表编辑器。
重新启动计算机。
错误742/741：提示“远程服务器不支持加密”
选择VPN连接，右键属性，点击安全。
在数据加密项选择“没有加密也可以连接”（Win7下点击网络共享中心—更改适配器—点击VPN连接图标—查看属性—安全数据加密—选择“没有加密也可以连接”）。
错误800：提示是“不能建立VPN连接，VPN服务器不能到达”
如果计算机中开启了系统防火墙，可以先关闭后再重试。
如果有安装路由器的用户，建议重启一下路由器。
部分网络如校园网、广电网、长城宽带、宽带通，容易出现800错误，需要与网络接入部门联系。
桌面右键单击“我的电脑”或“计算机”，打开“管理”，在“服务和应用程序”中，点击“服务”，找到“IPsec Policy Agent”服务，检查有没有禁用该服务。如果为禁用状态则改为自动状态，启动该服务。
错误619
如果打开了防火墙（包括系统自带的）：关闭防火墙，或者设置防火墙允许UDP 1701端口。
使用路由器上网：不使用路由器，或者映射UDP 1701端口。
如果无以上两种现象存在，但是还出现619错误：关闭所有正在使用网络的软件，重新启动计算机然后重新进行连接。
连上国外VPN后打开国内网页速度很慢
因为连接上了VPN的国外线路，本地网络出口已经变更为了国家带宽出口，因此在连接VPN的状态下访问国内的网页速度是比较慢的，可简单理解成：因为线路的传输需要从国内到国外，再从国外返回国内。而如果是访问国外网页的话，此时线路方式从国内直接传输到国外是相对最快的。而且还取决于您所选的线路距离，如果您选择的是美国的线路，那么访问国内的网页肯定较慢。
移动终端连接不上
当前网络是3G网络：3G网络通常都不稳定，不保证每次都可以连接上。
如果正在办公室使用公司的无线网络但连不上VPN或发生无法响应PPTP服务器错误：请详细咨询相关人员所处的网络宽带服务商是否支持VPN，其次看所处的网络路由器是否禁止了VPN端口。
电脑上可以连接VPN，但手机就不行：请确认电脑中的VPN是否处于“正在连接”的状态，如果是，请先断开电脑中的，再次连接手机试试。请注意一个账号不能同时登录在两个设备中。
错误789
连接尝试失败，因为安全层在初始化与远程计算机的协商时遇到一个处理错误
1. 单击“开始”，单击“运行”，键入“regedit”，然后单击“确定”
2. 找到下面的注册表子项，然后单击它：
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters
3. 在“编辑”菜单上，单击“新建”->“DWORD值”
4. 在“名称”框中，键入“ProhibitIpSec”
5. 在“数值数据”框中，键入“1”，然后单击“确定”
6. 退出注册表编辑器，然后重新启动计算机
评价编辑
优点

VPN能够让移动员工、远程员工、商务合作伙伴和其他人利用本地可用的高速宽带网连接（如DSL、有线电视或者WiFi网络）连接到企业网络。此外，高速宽带网连接提供一种成本效率高的连接远程办公室的方法。
设计良好的宽带VPN是模块化的和可升级的。VPN能够让应用者使用一种很容易设置的互联网基础设施，让新的用户迅速和轻松地添加到这个网络。这种能力意味着企业不用增加额外的基础设施就可以提供大量的容量和应用。
VPN能提供高水平的安全，使用高级的加密和身份识别协议保护数据避免受到窥探，阻止数据窃贼和其他非授权用户接触这种数据。
完全控制，虚拟专用网使用户可以利用ISP的设施和服务，同时又完全掌握着自己网络的控制权。用户只利用ISP提供的网络资源，对于其它的安全设置、网络管理变化可由自己管理。在企业内部也可以自己建立虚拟专用网。
缺点

企业不能直接控制基于互联网的VPN的可靠性和性能。机构必须依靠提供VPN的互联网服务提供商保证服务的运行。这个因素使企业与互联网服务提供商签署一个服务级协议非常重要，要签署一个保证各种性能指标的协议。
企业创建和部署VPN线路并不容易。这种技术需要高水平地理解网络和安全问题，需要认真的规划和配置。因此，选择互联网服务提供商负责运行VPN的大多数事情是一个好主意。
不同厂商的VPN产品和解决方案总是不兼容的，因为许多厂商不愿意或者不能遵守VPN技术标准。因此，混合使用不同厂商的产品可能会出现技术问题。另一方面，使用一家供应商的设备可能会提高成本。
当使用无线设备时，VPN有安全风险。在接入点之间漫游特别容易出问题。当用户在接入点之间漫游的时候，任何使用高级加密技术的解决方案都可能被攻破。
各个系统下VPN的登陆配置编辑
Windows XP

建立一个新连接；
选择“连接到我工作的地方的网络”；
选择“虚拟专用网络连接”；
设定连接名称（例如：VPN）；
输入主机名称或公网IP地址；
完成新增连接，勾选“将这个连接的快捷方式加到我的桌面”（以便日后连接）；
输入账号，密码，即可连接。
Windows 7

在画面右下角，点选网络连接，然后选择“打开网络共享中心”；
在弹出的对话窗口中，选择“设置新的连接或网络”；
选择“连接到工作区”，然后选择“使用我的Internet连接（VPN），通过Internet使用虚拟专用网络（VPN）来连接”，然后单击“我将稍后设置Internet连接”；
在“Internet 地址”里，填上VPN提供的IP地址。填好IP后，其它东西都不用管它，直接点击下一步。目标名称填写“VPN连接”；
填VPN的用户名和密码，先不要填，点“创建”；
到这里就完成的连接设置导向。点击“关闭”。；
回到桌面右键点击“网络”->“属性”，再点击一下左边的“更改适配器设置”；
找到刚才建好的“VPN连接”并双击打开；
填写提供的VPN用户名和密码，“域”可以不用填写。然后点击属性->安全；
在“数据加密”这一项选中“可选加密（没有加密也可以连接）”选好后点击“确定”。VPN类型自动，使用这些协议选择CHAP，MS-CHAP v2；
整个Windows7 VPN过程都设置完成了。点击“连接”就可以了。
Ubuntu

1.画面右上角最右端图标单击，选择“系统设置”
2.选择“网络”，选择添加网络，接口VPN，创建。
Android

打开手机主菜单，选择“设置”；
选择“无线和网络”；
选择“虚拟专用网设置”；
选择“添加虚拟专用网”；
选择PPTP方式；
输入虚拟专用网名称（如VPN）；
填写服务器域名，点击“确定”。然后按menu键，保存设置；
点击打开刚刚建好的连接，填写用户名和密码，点击“连接”。
iOS

点击桌面上的“设置”图标进入设置；
点击“通用”进入通用设置；
点击“网络”，进入网络设置；
点击“VPN”进入设置；
点击“添加VPN配置”；
在协议类型上选择“PPTP”，在“描述”栏中填入“VPN”，在服务器栏中填入服务器域名，在账户和密码栏中填入用户名和密码，其他设置保持不变，然后点击“存储”。；
点击“VPN”开关，就会开启连接，连接成功后，右上角会出现小图标。
OS X

从任务栏菜单打开系统设置，选择“网络”；
在新对话框中选择“添加”，然后从下拉菜单选择“VPN”；
从VPN类型下拉菜单中选择PPTP。填写服务名称，点击“创建”按钮；
在配置下拉菜单中选择“增加配置”；
填写服务器地址，用户名；
点击“认证配置”按钮，在弹出的对话框中选择“密码”单选框，并输入密码；
回到主设置框，点击“应用”保存设置即可。
相关法律法规编辑
2003年4月，信息产业部颁发了《电信业务分类目录》，取消了国际电信业务的分类，同时将虚拟专用网业务自基础电信业务中分离出来，成为独立的增值电信业务分类。但是此处的“虚拟专用网”概念与行业内的VPN业务是不一样的。新的《电信业务分类目录》中对该分类的解释是：国内因特网虚拟专用网业务（IP-VPN）是指经营者利用自有的或租用公用因特网网络资源，采用TCP/IP协议，为国内用户定制因特网闭合用户群网络的服务。这种分类的解释强调了两个特点，一个是利用因特网网络资源，一个是采用TCP/IP协议。这种解释是与当时的市场状况所对应的，当时关注的是基于互连网的IPSec VPN，虽然该解释可以基本涵盖后出现的SSL VPN模式，但并没有关注MPLS VPN。
2003年8月，信息产业部发布《关于组织开展国内多方通信服务等三项电信业务商用试验的通知》，就“国内多方通信服务业务”、“在线数据处理与交易处理业务”、“国内因特网虚拟专用网业务”等三项增值电信业务组织开展商用试验，有效期至2004年8月底。
2004年11月，信息产业部发布《关于继续开展国内多方通信服务等三项增值电信业务商用试验的通告》，决定将以上三项增值电信业务商用试验期延长一年，至2005年8月31日。
2006年1月，信息产业部发布《关于两项增值电信业务及国内多方通信服务的通告》，正式开放“国内因特网虚拟专用网业务”和“在线数据处理与交易处理业务”两项增值电信业务，上述两项增值电信业务由商用试验转为正式商用。
2008年，正式颁发IP-VPN业务牌照。名为IPSec VPN的中国“国内因特网虚拟专用网”增值电信业务许可证自其诞生之日起即以MPLS VPN为发展方向，导致VPN市场无规可循，实际上是在“灰色运营”。
2013年，工业与信息化部公布的《电信业务分类目录（征求意见稿）》中仍然没有对此作出任何改变。
2015年1月27日，工信部回应VPN被封事件，表示一些不良信息应该按照中国法律进行管理。[1]
工信部此前发布规定，在中国提供VPN服务的公司必须登记注册，否则将“不会受到中国法律的保护”工作原理编辑
通常情况下，VPN网关采取双网卡结构，外网卡使用公网IP接入Internet。
网络一(假定为公网internet)的终端A访问网络二(假定为公司内网)的终端B，其发出的访问数据包的目标地址为终端B的内部IP地址。
网络二的VPN网关在接收到终端A发出的访问数据包时对其目标地址进行检查，如果目标地址属于网络二的地址，则将该数据包进行封装，封装的方式根据所采用的VPN技术不同而不同，同时VPN网关会构造一个新VPN数据包，并将封装后的原数据包作为VPN数据包的负载，VPN数据包的目标地址为网络二的VPN网关的外部地址。
网络二的VPN网关将VPN数据包发送到Internet，由于VPN数据包的目标地址是网络一的VPN网关的外部地址，所以该数据包将被Internet中的路由正确地发送到网络二的VPN网关。
网络二的VPN网关对接收到的数据包进行检查，如果发现该数据包是从网络一的VPN网关发出的，即可判定该数据包为VPN数据包，并对该数据包进行解包处理。解包的过程主要是先将VPN数据包的包头剥离，再将数据包反向处理还原成原始的数据包。
网络二的VPN网关将还原后的原始数据包发送至目标终端B，由于原始数据包的目标地址是终端B的IP，所以该数据包能够被正确地发送到终端B。在终端B看来，它收到的数据包就和从终端A直接发过来的一样。
从终端B返回终端A的数据包处理过程和上述过程一样，这样两个网络内的终端就可以相互通讯了。
通过上述说明可以发现，在VPN网关对数据包进行处理时，有两个参数对于VPN通讯十分重要：原始数据包的目标地址（VPN目标地址）和远程VPN网关地址。根据VPN目标地址，VPN网关能够判断对哪些数据包进行VPN处理，对于不需要处理的数据包通常情况下可直接转发到上级路由；远程VPN网关地址则指定了处理后的VPN数据包发送的目标地址，即VPN隧道的另一端VPN网关地址。由于网络通讯是双向的，在进行VPN通讯时，隧道两端的VPN网关都必须知道VPN目标地址和与此对应的远端VPN网关地址。
分类标准编辑
根据不同的划分标准，VPN可以按几个标准进行分类划分：
1、按VPN的协议分类：
VPN的隧道协议主要有三种，PPTP、L2TP和IPSec，其中PPTP和L2TP协议工作在OSI模型的第二层，又称为二层隧道协议；IPSec是第三层隧道协议。
2、按VPN的应用分类：
（1）Access VPN（远程接入VPN）：客户端到网关，使用公网作为骨干网在设备之间传输VPN数据流量；
（2）Intranet VPN（内联网VPN）：网关到网关，通过公司的网络架构连接来自同公司的资源；
（3）Extranet VPN（外联网VPN）：与合作伙伴企业网构成Extranet，将一个公司与另一个公司的资源进行连接。
3、按所用的设备类型进行分类：
网络设备提供商针对不同客户的需求，开发出不同的VPN网络设备，主要为交换机、路由器和防火墙：
（1）路由器式VPN：路由器式VPN部署较容易，只要在路由器上添加VPN服务即可；
（2）交换机式VPN：主要应用于连接用户较少的VPN网络；
（3）防火墙式VPN：防火墙式VPN是最常见的一种VPN的实现方式，许多厂商都提供这种配置类型
4．按照实现原理划分：
（1）重叠VPN：此VPN需要用户自己建立端节点之间的VPN链路，主要包括：GRE、L2TP、IPSec等众多技术。
（2）对等VPN：由网络运营商在主干网上完成VPN通道的建立，主要包括MPLS、VPN技术。
实现方式编辑
VPN的实现有很多种方法，常用的有以下四种：
1．VPN服务器：在大型局域网中，可以通过在网络中心搭建VPN服务器的方法实现VPN。
2．软件VPN：可以通过专用的软件实现VPN。
3．硬件VPN：可以通过专用的硬件实现VPN。
4．集成VPN：某些硬件设备，如路由器、防火墙等，都含有VPN功能，但是一般拥有VPN功能的硬件设备通常都比没有这一功能的要贵。
常用VPN技术编辑
1．MPLS VPN是一种基于MPLS技术的IP VPN，是在网络路由和交换设备上应用MPLS（Multiprotocol Label Switching，多协议标记交换）技术，简化核心路由器的路由选择方式，利用结合传统路由技术的标记交换实现的IP虚拟专用网络（IP VPN）。MPLS优势在于将二层交换和三层路由技术结合起来，在解决VPN、服务分类和流量工程这些IP网络的重大问题时具有很优异的表现。因此，MPLS VPN在解决企业互连、提供各种新业务方面也越来越被运营商看好，成为在IP网络运营商提供增值业务的重要手段。MPLS VPN又可分为二层MPLS VPN（即MPLS L2 VPN）和三层MPLS VPN（即MPLS L3 VPN）。
2．SSL VPN是以HTTPS（Secure HTTP，安全的HTTP，即支持SSL的HTTP协议）为基础的VPN技术，工作在传输层和应用层之间。SSL VPN充分利用了SSL协议提供的基于证书的身份认证、数据加密和消息完整性验证机制，可以为应用层之间的通信建立安全连接。SSL VPN广泛应用于基于Web的远程安全接入，为用户远程访问公司内部网络提供了安全保证。
3．IPSec VPN是基于IPSec协议的VPN技术，由IPSec协议提供隧道安全保障。IPSec是一种由IETF设计的端到端的确保基于IP通讯的数据安全性的机制。它为Internet上传输的数据提供了高质量的、可互操作的、基于密码学的安全保证。
常见问题编辑
错误691：提示“由于域上的用户名和/或密码无效而拒绝访问”
一般的原因是VPN连接时输入的账户和/或密码不正确，或是没有使用VPN服务的权限。
VPN一个账号默认仅限一台电脑使用，检查您的用户名有无登录重复。
若您是在使用的途中掉线了，不要急着再次连接，请耐心等待几分钟。
若还是提示错误，请联系网络管理员。
错误691：提示“端口已断开连接”
市面上有一小部分的路由器对VPN支持不好，从而引起错误691、只能连接几台机、经常掉线等多种问题，有时候还会出现错误800。原因是路由器采用NAT方式，不能让VPN协议穿透。
如果计算机中开启了系统防火墙，可以先关闭后再重试。
如果偶尔出现，重拨几次，或者重新启动计算机及路由器后再重试。
如果是通过局域网或者通过路由器上网的用户，请网络管理员在服务器或者路由器上打开UDP端口1701~1704。
如果路由器中不能设置，可以尝试将计算机直接连到外网，用单机拨号方式连接互联网，再重试VPN拨号。
部分网络如校园网、广电网、长城宽带、宽带通，容易出现691错误，需要与网络接入部门联系。
安装了简化版的操作系统容易缺少相关组件，可以下载安装错误691注册表文件。
错误721：提示“远程计算机没反应”
这种情况可能是网络延迟造成的，可以多连几次试试，如果还是不行，可以尝试以下解决方法：
单击“开始”，然后单击“运行”。
在“运行”中，键入regedit.exe，然后单击“确定”。
在注册表编辑器中，找到以下子项：HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002bE10318}/<000x>，其中<000x>是WAN微型端口（PPTP）驱动程序的网络适配器。
在“编辑”菜单上，指向“新建”，然后单击“DWORD 值”。
键入ValidateAddress，然后按 Enter。该值的默认设置为“1”（打开）；因此，您可以通过将其设置为“0”将其关闭。
退出注册表编辑器。
重新启动计算机。
错误742/741：提示“远程服务器不支持加密”
选择VPN连接，右键属性，点击安全。
在数据加密项选择“没有加密也可以连接”（Win7下点击网络共享中心—更改适配器—点击VPN连接图标—查看属性—安全数据加密—选择“没有加密也可以连接”）。
错误800：提示是“不能建立VPN连接，VPN服务器不能到达”
如果计算机中开启了系统防火墙，可以先关闭后再重试。
如果有安装路由器的用户，建议重启一下路由器。
部分网络如校园网、广电网、长城宽带、宽带通，容易出现800错误，需要与网络接入部门联系。
桌面右键单击“我的电脑”或“计算机”，打开“管理”，在“服务和应用程序”中，点击“服务”，找到“IPsec Policy Agent”服务，检查有没有禁用该服务。如果为禁用状态则改为自动状态，启动该服务。
错误619
如果打开了防火墙（包括系统自带的）：关闭防火墙，或者设置防火墙允许UDP 1701端口。
使用路由器上网：不使用路由器，或者映射UDP 1701端口。
如果无以上两种现象存在，但是还出现619错误：关闭所有正在使用网络的软件，重新启动计算机然后重新进行连接。
连上国外VPN后打开国内网页速度很慢
因为连接上了VPN的国外线路，本地网络出口已经变更为了国家带宽出口，因此在连接VPN的状态下访问国内的网页速度是比较慢的，可简单理解成：因为线路的传输需要从国内到国外，再从国外返回国内。而如果是访问国外网页的话，此时线路方式从国内直接传输到国外是相对最快的。而且还取决于您所选的线路距离，如果您选择的是美国的线路，那么访问国内的网页肯定较慢。
移动终端连接不上
当前网络是3G网络：3G网络通常都不稳定，不保证每次都可以连接上。
如果正在办公室使用公司的无线网络但连不上VPN或发生无法响应PPTP服务器错误：请详细咨询相关人员所处的网络宽带服务商是否支持VPN，其次看所处的网络路由器是否禁止了VPN端口。
电脑上可以连接VPN，但手机就不行：请确认电脑中的VPN是否处于“正在连接”的状态，如果是，请先断开电脑中的，再次连接手机试试。请注意一个账号不能同时登录在两个设备中。
错误789
连接尝试失败，因为安全层在初始化与远程计算机的协商时遇到一个处理错误
1. 单击“开始”，单击“运行”，键入“regedit”，然后单击“确定”
2. 找到下面的注册表子项，然后单击它：
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters
3. 在“编辑”菜单上，单击“新建”->“DWORD值”
4. 在“名称”框中，键入“ProhibitIpSec”
5. 在“数值数据”框中，键入“1”，然后单击“确定”
6. 退出注册表编辑器，然后重新启动计算机
评价编辑
优点

VPN能够让移动员工、远程员工、商务合作伙伴和其他人利用本地可用的高速宽带网连接（如DSL、有线电视或者WiFi网络）连接到企业网络。此外，高速宽带网连接提供一种成本效率高的连接远程办公室的方法。
设计良好的宽带VPN是模块化的和可升级的。VPN能够让应用者使用一种很容易设置的互联网基础设施，让新的用户迅速和轻松地添加到这个网络。这种能力意味着企业不用增加额外的基础设施就可以提供大量的容量和应用。
VPN能提供高水平的安全，使用高级的加密和身份识别协议保护数据避免受到窥探，阻止数据窃贼和其他非授权用户接触这种数据。
完全控制，虚拟专用网使用户可以利用ISP的设施和服务，同时又完全掌握着自己网络的控制权。用户只利用ISP提供的网络资源，对于其它的安全设置、网络管理变化可由自己管理。在企业内部也可以自己建立虚拟专用网。
缺点

企业不能直接控制基于互联网的VPN的可靠性和性能。机构必须依靠提供VPN的互联网服务提供商保证服务的运行。这个因素使企业与互联网服务提供商签署一个服务级协议非常重要，要签署一个保证各种性能指标的协议。
企业创建和部署VPN线路并不容易。这种技术需要高水平地理解网络和安全问题，需要认真的规划和配置。因此，选择互联网服务提供商负责运行VPN的大多数事情是一个好主意。
不同厂商的VPN产品和解决方案总是不兼容的，因为许多厂商不愿意或者不能遵守VPN技术标准。因此，混合使用不同厂商的产品可能会出现技术问题。另一方面，使用一家供应商的设备可能会提高成本。
当使用无线设备时，VPN有安全风险。在接入点之间漫游特别容易出问题。当用户在接入点之间漫游的时候，任何使用高级加密技术的解决方案都可能被攻破。
各个系统下VPN的登陆配置编辑
Windows XP

建立一个新连接；
选择“连接到我工作的地方的网络”；
选择“虚拟专用网络连接”；
设定连接名称（例如：VPN）；
输入主机名称或公网IP地址；
完成新增连接，勾选“将这个连接的快捷方式加到我的桌面”（以便日后连接）；
输入账号，密码，即可连接。
Windows 7

在画面右下角，点选网络连接，然后选择“打开网络共享中心”；
在弹出的对话窗口中，选择“设置新的连接或网络”；
选择“连接到工作区”，然后选择“使用我的Internet连接（VPN），通过Internet使用虚拟专用网络（VPN）来连接”，然后单击“我将稍后设置Internet连接”；
在“Internet 地址”里，填上VPN提供的IP地址。填好IP后，其它东西都不用管它，直接点击下一步。目标名称填写“VPN连接”；
填VPN的用户名和密码，先不要填，点“创建”；
到这里就完成的连接设置导向。点击“关闭”。；
回到桌面右键点击“网络”->“属性”，再点击一下左边的“更改适配器设置”；
找到刚才建好的“VPN连接”并双击打开；
填写提供的VPN用户名和密码，“域”可以不用填写。然后点击属性->安全；
在“数据加密”这一项选中“可选加密（没有加密也可以连接）”选好后点击“确定”。VPN类型自动，使用这些协议选择CHAP，MS-CHAP v2；
整个Windows7 VPN过程都设置完成了。点击“连接”就可以了。
Ubuntu

1.画面右上角最右端图标单击，选择“系统设置”
2.选择“网络”，选择添加网络，接口VPN，创建。
Android

打开手机主菜单，选择“设置”；
选择“无线和网络”；
选择“虚拟专用网设置”；
选择“添加虚拟专用网”；
选择PPTP方式；
输入虚拟专用网名称（如VPN）；
填写服务器域名，点击“确定”。然后按menu键，保存设置；
点击打开刚刚建好的连接，填写用户名和密码，点击“连接”。
iOS

点击桌面上的“设置”图标进入设置；
点击“通用”进入通用设置；
点击“网络”，进入网络设置；
点击“VPN”进入设置；
点击“添加VPN配置”；
在协议类型上选择“PPTP”，在“描述”栏中填入“VPN”，在服务器栏中填入服务器域名，在账户和密码栏中填入用户名和密码，其他设置保持不变，然后点击“存储”。；
点击“VPN”开关，就会开启连接，连接成功后，右上角会出现小图标。
OS X

从任务栏菜单打开系统设置，选择“网络”；
在新对话框中选择“添加”，然后从下拉菜单选择“VPN”；
从VPN类型下拉菜单中选择PPTP。填写服务名称，点击“创建”按钮；
在配置下拉菜单中选择“增加配置”；
填写服务器地址，用户名；
点击“认证配置”按钮，在弹出的对话框中选择“密码”单选框，并输入密码；
回到主设置框，点击“应用”保存设置即可。
相关法律法规编辑
2003年4月，信息产业部颁发了《电信业务分类目录》，取消了国际电信业务的分类，同时将虚拟专用网业务自基础电信业务中分离出来，成为独立的增值电信业务分类。但是此处的“虚拟专用网”概念与行业内的VPN业务是不一样的。新的《电信业务分类目录》中对该分类的解释是：国内因特网虚拟专用网业务（IP-VPN）是指经营者利用自有的或租用公用因特网网络资源，采用TCP/IP协议，为国内用户定制因特网闭合用户群网络的服务。这种分类的解释强调了两个特点，一个是利用因特网网络资源，一个是采用TCP/IP协议。这种解释是与当时的市场状况所对应的，当时关注的是基于互连网的IPSec VPN，虽然该解释可以基本涵盖后出现的SSL VPN模式，但并没有关注MPLS VPN。
2003年8月，信息产业部发布《关于组织开展国内多方通信服务等三项电信业务商用试验的通知》，就“国内多方通信服务业务”、“在线数据处理与交易处理业务”、“国内因特网虚拟专用网业务”等三项增值电信业务组织开展商用试验，有效期至2004年8月底。
2004年11月，信息产业部发布《关于继续开展国内多方通信服务等三项增值电信业务商用试验的通告》，决定将以上三项增值电信业务商用试验期延长一年，至2005年8月31日。
2006年1月，信息产业部发布《关于两项增值电信业务及国内多方通信服务的通告》，正式开放“国内因特网虚拟专用网业务”和“在线数据处理与交易处理业务”两项增值电信业务，上述两项增值电信业务由商用试验转为正式商用。
2008年，正式颁发IP-VPN业务牌照。名为IPSec VPN的中国“国内因特网虚拟专用网”增值电信业务许可证自其诞生之日起即以MPLS VPN为发展方向，导致VPN市场无规可循，实际上是在“灰色运营”。
2013年，工业与信息化部公布的《电信业务分类目录（征求意见稿）》中仍然没有对此作出任何改变。
2015年1月27日，工信部回应VPN被封事件，表示一些不良信息应该按照中国法律进行管理。[1]
工信部此前发布规定，在中国提供VPN服务的公司必须登记注册，否则将“不会受到中国法律的保护”工作原理编辑
通常情况下，VPN网关采取双网卡结构，外网卡使用公网IP接入Internet。
网络一(假定为公网internet)的终端A访问网络二(假定为公司内网)的终端B，其发出的访问数据包的目标地址为终端B的内部IP地址。
网络二的VPN网关在接收到终端A发出的访问数据包时对其目标地址进行检查，如果目标地址属于网络二的地址，则将该数据包进行封装，封装的方式根据所采用的VPN技术不同而不同，同时VPN网关会构造一个新VPN数据包，并将封装后的原数据包作为VPN数据包的负载，VPN数据包的目标地址为网络二的VPN网关的外部地址。
网络二的VPN网关将VPN数据包发送到Internet，由于VPN数据包的目标地址是网络一的VPN网关的外部地址，所以该数据包将被Internet中的路由正确地发送到网络二的VPN网关。
网络二的VPN网关对接收到的数据包进行检查，如果发现该数据包是从网络一的VPN网关发出的，即可判定该数据包为VPN数据包，并对该数据包进行解包处理。解包的过程主要是先将VPN数据包的包头剥离，再将数据包反向处理还原成原始的数据包。
网络二的VPN网关将还原后的原始数据包发送至目标终端B，由于原始数据包的目标地址是终端B的IP，所以该数据包能够被正确地发送到终端B。在终端B看来，它收到的数据包就和从终端A直接发过来的一样。
从终端B返回终端A的数据包处理过程和上述过程一样，这样两个网络内的终端就可以相互通讯了。
通过上述说明可以发现，在VPN网关对数据包进行处理时，有两个参数对于VPN通讯十分重要：原始数据包的目标地址（VPN目标地址）和远程VPN网关地址。根据VPN目标地址，VPN网关能够判断对哪些数据包进行VPN处理，对于不需要处理的数据包通常情况下可直接转发到上级路由；远程VPN网关地址则指定了处理后的VPN数据包发送的目标地址，即VPN隧道的另一端VPN网关地址。由于网络通讯是双向的，在进行VPN通讯时，隧道两端的VPN网关都必须知道VPN目标地址和与此对应的远端VPN网关地址。
分类标准编辑
根据不同的划分标准，VPN可以按几个标准进行分类划分：
1、按VPN的协议分类：
VPN的隧道协议主要有三种，PPTP、L2TP和IPSec，其中PPTP和L2TP协议工作在OSI模型的第二层，又称为二层隧道协议；IPSec是第三层隧道协议。
2、按VPN的应用分类：
（1）Access VPN（远程接入VPN）：客户端到网关，使用公网作为骨干网在设备之间传输VPN数据流量；
（2）Intranet VPN（内联网VPN）：网关到网关，通过公司的网络架构连接来自同公司的资源；
（3）Extranet VPN（外联网VPN）：与合作伙伴企业网构成Extranet，将一个公司与另一个公司的资源进行连接。
3、按所用的设备类型进行分类：
网络设备提供商针对不同客户的需求，开发出不同的VPN网络设备，主要为交换机、路由器和防火墙：
（1）路由器式VPN：路由器式VPN部署较容易，只要在路由器上添加VPN服务即可；
（2）交换机式VPN：主要应用于连接用户较少的VPN网络；
（3）防火墙式VPN：防火墙式VPN是最常见的一种VPN的实现方式，许多厂商都提供这种配置类型
4．按照实现原理划分：
（1）重叠VPN：此VPN需要用户自己建立端节点之间的VPN链路，主要包括：GRE、L2TP、IPSec等众多技术。
（2）对等VPN：由网络运营商在主干网上完成VPN通道的建立，主要包括MPLS、VPN技术。
实现方式编辑
VPN的实现有很多种方法，常用的有以下四种：
1．VPN服务器：在大型局域网中，可以通过在网络中心搭建VPN服务器的方法实现VPN。
2．软件VPN：可以通过专用的软件实现VPN。
3．硬件VPN：可以通过专用的硬件实现VPN。
4．集成VPN：某些硬件设备，如路由器、防火墙等，都含有VPN功能，但是一般拥有VPN功能的硬件设备通常都比没有这一功能的要贵。
常用VPN技术编辑
1．MPLS VPN是一种基于MPLS技术的IP VPN，是在网络路由和交换设备上应用MPLS（Multiprotocol Label Switching，多协议标记交换）技术，简化核心路由器的路由选择方式，利用结合传统路由技术的标记交换实现的IP虚拟专用网络（IP VPN）。MPLS优势在于将二层交换和三层路由技术结合起来，在解决VPN、服务分类和流量工程这些IP网络的重大问题时具有很优异的表现。因此，MPLS VPN在解决企业互连、提供各种新业务方面也越来越被运营商看好，成为在IP网络运营商提供增值业务的重要手段。MPLS VPN又可分为二层MPLS VPN（即MPLS L2 VPN）和三层MPLS VPN（即MPLS L3 VPN）。
2．SSL VPN是以HTTPS（Secure HTTP，安全的HTTP，即支持SSL的HTTP协议）为基础的VPN技术，工作在传输层和应用层之间。SSL VPN充分利用了SSL协议提供的基于证书的身份认证、数据加密和消息完整性验证机制，可以为应用层之间的通信建立安全连接。SSL VPN广泛应用于基于Web的远程安全接入，为用户远程访问公司内部网络提供了安全保证。
3．IPSec VPN是基于IPSec协议的VPN技术，由IPSec协议提供隧道安全保障。IPSec是一种由IETF设计的端到端的确保基于IP通讯的数据安全性的机制。它为Internet上传输的数据提供了高质量的、可互操作的、基于密码学的安全保证。
常见问题编辑
错误691：提示“由于域上的用户名和/或密码无效而拒绝访问”
一般的原因是VPN连接时输入的账户和/或密码不正确，或是没有使用VPN服务的权限。
VPN一个账号默认仅限一台电脑使用，检查您的用户名有无登录重复。
若您是在使用的途中掉线了，不要急着再次连接，请耐心等待几分钟。
若还是提示错误，请联系网络管理员。
错误691：提示“端口已断开连接”
市面上有一小部分的路由器对VPN支持不好，从而引起错误691、只能连接几台机、经常掉线等多种问题，有时候还会出现错误800。原因是路由器采用NAT方式，不能让VPN协议穿透。
如果计算机中开启了系统防火墙，可以先关闭后再重试。
如果偶尔出现，重拨几次，或者重新启动计算机及路由器后再重试。
如果是通过局域网或者通过路由器上网的用户，请网络管理员在服务器或者路由器上打开UDP端口1701~1704。
如果路由器中不能设置，可以尝试将计算机直接连到外网，用单机拨号方式连接互联网，再重试VPN拨号。
部分网络如校园网、广电网、长城宽带、宽带通，容易出现691错误，需要与网络接入部门联系。
安装了简化版的操作系统容易缺少相关组件，可以下载安装错误691注册表文件。
错误721：提示“远程计算机没反应”
这种情况可能是网络延迟造成的，可以多连几次试试，如果还是不行，可以尝试以下解决方法：
单击“开始”，然后单击“运行”。
在“运行”中，键入regedit.exe，然后单击“确定”。
在注册表编辑器中，找到以下子项：HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002bE10318}/<000x>，其中<000x>是WAN微型端口（PPTP）驱动程序的网络适配器。
在“编辑”菜单上，指向“新建”，然后单击“DWORD 值”。
键入ValidateAddress，然后按 Enter。该值的默认设置为“1”（打开）；因此，您可以通过将其设置为“0”将其关闭。
退出注册表编辑器。
重新启动计算机。
错误742/741：提示“远程服务器不支持加密”
选择VPN连接，右键属性，点击安全。
在数据加密项选择“没有加密也可以连接”（Win7下点击网络共享中心—更改适配器—点击VPN连接图标—查看属性—安全数据加密—选择“没有加密也可以连接”）。
错误800：提示是“不能建立VPN连接，VPN服务器不能到达”
如果计算机中开启了系统防火墙，可以先关闭后再重试。
如果有安装路由器的用户，建议重启一下路由器。
部分网络如校园网、广电网、长城宽带、宽带通，容易出现800错误，需要与网络接入部门联系。
桌面右键单击“我的电脑”或“计算机”，打开“管理”，在“服务和应用程序”中，点击“服务”，找到“IPsec Policy Agent”服务，检查有没有禁用该服务。如果为禁用状态则改为自动状态，启动该服务。
错误619
如果打开了防火墙（包括系统自带的）：关闭防火墙，或者设置防火墙允许UDP 1701端口。
使用路由器上网：不使用路由器，或者映射UDP 1701端口。
如果无以上两种现象存在，但是还出现619错误：关闭所有正在使用网络的软件，重新启动计算机然后重新进行连接。
连上国外VPN后打开国内网页速度很慢
因为连接上了VPN的国外线路，本地网络出口已经变更为了国家带宽出口，因此在连接VPN的状态下访问国内的网页速度是比较慢的，可简单理解成：因为线路的传输需要从国内到国外，再从国外返回国内。而如果是访问国外网页的话，此时线路方式从国内直接传输到国外是相对最快的。而且还取决于您所选的线路距离，如果您选择的是美国的线路，那么访问国内的网页肯定较慢。
移动终端连接不上
当前网络是3G网络：3G网络通常都不稳定，不保证每次都可以连接上。
如果正在办公室使用公司的无线网络但连不上VPN或发生无法响应PPTP服务器错误：请详细咨询相关人员所处的网络宽带服务商是否支持VPN，其次看所处的网络路由器是否禁止了VPN端口。
电脑上可以连接VPN，但手机就不行：请确认电脑中的VPN是否处于“正在连接”的状态，如果是，请先断开电脑中的，再次连接手机试试。请注意一个账号不能同时登录在两个设备中。
错误789
连接尝试失败，因为安全层在初始化与远程计算机的协商时遇到一个处理错误
1. 单击“开始”，单击“运行”，键入“regedit”，然后单击“确定”
2. 找到下面的注册表子项，然后单击它：
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters
3. 在“编辑”菜单上，单击“新建”->“DWORD值”
4. 在“名称”框中，键入“ProhibitIpSec”
5. 在“数值数据”框中，键入“1”，然后单击“确定”
6. 退出注册表编辑器，然后重新启动计算机
评价编辑
优点

VPN能够让移动员工、远程员工、商务合作伙伴和其他人利用本地可用的高速宽带网连接（如DSL、有线电视或者WiFi网络）连接到企业网络。此外，高速宽带网连接提供一种成本效率高的连接远程办公室的方法。
设计良好的宽带VPN是模块化的和可升级的。VPN能够让应用者使用一种很容易设置的互联网基础设施，让新的用户迅速和轻松地添加到这个网络。这种能力意味着企业不用增加额外的基础设施就可以提供大量的容量和应用。
VPN能提供高水平的安全，使用高级的加密和身份识别协议保护数据避免受到窥探，阻止数据窃贼和其他非授权用户接触这种数据。
完全控制，虚拟专用网使用户可以利用ISP的设施和服务，同时又完全掌握着自己网络的控制权。用户只利用ISP提供的网络资源，对于其它的安全设置、网络管理变化可由自己管理。在企业内部也可以自己建立虚拟专用网。
缺点

企业不能直接控制基于互联网的VPN的可靠性和性能。机构必须依靠提供VPN的互联网服务提供商保证服务的运行。这个因素使企业与互联网服务提供商签署一个服务级协议非常重要，要签署一个保证各种性能指标的协议。
企业创建和部署VPN线路并不容易。这种技术需要高水平地理解网络和安全问题，需要认真的规划和配置。因此，选择互联网服务提供商负责运行VPN的大多数事情是一个好主意。
不同厂商的VPN产品和解决方案总是不兼容的，因为许多厂商不愿意或者不能遵守VPN技术标准。因此，混合使用不同厂商的产品可能会出现技术问题。另一方面，使用一家供应商的设备可能会提高成本。
当使用无线设备时，VPN有安全风险。在接入点之间漫游特别容易出问题。当用户在接入点之间漫游的时候，任何使用高级加密技术的解决方案都可能被攻破。
各个系统下VPN的登陆配置编辑
Windows XP

建立一个新连接；
选择“连接到我工作的地方的网络”；
选择“虚拟专用网络连接”；
设定连接名称（例如：VPN）；
输入主机名称或公网IP地址；
完成新增连接，勾选“将这个连接的快捷方式加到我的桌面”（以便日后连接）；
输入账号，密码，即可连接。
Windows 7

在画面右下角，点选网络连接，然后选择“打开网络共享中心”；
在弹出的对话窗口中，选择“设置新的连接或网络”；
选择“连接到工作区”，然后选择“使用我的Internet连接（VPN），通过Internet使用虚拟专用网络（VPN）来连接”，然后单击“我将稍后设置Internet连接”；
在“Internet 地址”里，填上VPN提供的IP地址。填好IP后，其它东西都不用管它，直接点击下一步。目标名称填写“VPN连接”；
填VPN的用户名和密码，先不要填，点“创建”；
到这里就完成的连接设置导向。点击“关闭”。；
回到桌面右键点击“网络”->“属性”，再点击一下左边的“更改适配器设置”；
找到刚才建好的“VPN连接”并双击打开；
填写提供的VPN用户名和密码，“域”可以不用填写。然后点击属性->安全；
在“数据加密”这一项选中“可选加密（没有加密也可以连接）”选好后点击“确定”。VPN类型自动，使用这些协议选择CHAP，MS-CHAP v2；
整个Windows7 VPN过程都设置完成了。点击“连接”就可以了。
Ubuntu

1.画面右上角最右端图标单击，选择“系统设置”
2.选择“网络”，选择添加网络，接口VPN，创建。
Android

打开手机主菜单，选择“设置”；
选择“无线和网络”；
选择“虚拟专用网设置”；
选择“添加虚拟专用网”；
选择PPTP方式；
输入虚拟专用网名称（如VPN）；
填写服务器域名，点击“确定”。然后按menu键，保存设置；
点击打开刚刚建好的连接，填写用户名和密码，点击“连接”。
iOS

点击桌面上的“设置”图标进入设置；
点击“通用”进入通用设置；
点击“网络”，进入网络设置；
点击“VPN”进入设置；
点击“添加VPN配置”；
在协议类型上选择“PPTP”，在“描述”栏中填入“VPN”，在服务器栏中填入服务器域名，在账户和密码栏中填入用户名和密码，其他设置保持不变，然后点击“存储”。；
点击“VPN”开关，就会开启连接，连接成功后，右上角会出现小图标。
OS X

从任务栏菜单打开系统设置，选择“网络”；
在新对话框中选择“添加”，然后从下拉菜单选择“VPN”；
从VPN类型下拉菜单中选择PPTP。填写服务名称，点击“创建”按钮；
在配置下拉菜单中选择“增加配置”；
填写服务器地址，用户名；
点击“认证配置”按钮，在弹出的对话框中选择“密码”单选框，并输入密码；
回到主设置框，点击“应用”保存设置即可。
相关法律法规编辑
2003年4月，信息产业部颁发了《电信业务分类目录》，取消了国际电信业务的分类，同时将虚拟专用网业务自基础电信业务中分离出来，成为独立的增值电信业务分类。但是此处的“虚拟专用网”概念与行业内的VPN业务是不一样的。新的《电信业务分类目录》中对该分类的解释是：国内因特网虚拟专用网业务（IP-VPN）是指经营者利用自有的或租用公用因特网网络资源，采用TCP/IP协议，为国内用户定制因特网闭合用户群网络的服务。这种分类的解释强调了两个特点，一个是利用因特网网络资源，一个是采用TCP/IP协议。这种解释是与当时的市场状况所对应的，当时关注的是基于互连网的IPSec VPN，虽然该解释可以基本涵盖后出现的SSL VPN模式，但并没有关注MPLS VPN。
2003年8月，信息产业部发布《关于组织开展国内多方通信服务等三项电信业务商用试验的通知》，就“国内多方通信服务业务”、“在线数据处理与交易处理业务”、“国内因特网虚拟专用网业务”等三项增值电信业务组织开展商用试验，有效期至2004年8月底。
2004年11月，信息产业部发布《关于继续开展国内多方通信服务等三项增值电信业务商用试验的通告》，决定将以上三项增值电信业务商用试验期延长一年，至2005年8月31日。
2006年1月，信息产业部发布《关于两项增值电信业务及国内多方通信服务的通告》，正式开放“国内因特网虚拟专用网业务”和“在线数据处理与交易处理业务”两项增值电信业务，上述两项增值电信业务由商用试验转为正式商用。
2008年，正式颁发IP-VPN业务牌照。名为IPSec VPN的中国“国内因特网虚拟专用网”增值电信业务许可证自其诞生之日起即以MPLS VPN为发展方向，导致VPN市场无规可循，实际上是在“灰色运营”。
2013年，工业与信息化部公布的《电信业务分类目录（征求意见稿）》中仍然没有对此作出任何改变。
2015年1月27日，工信部回应VPN被封事件，表示一些不良信息应该按照中国法律进行管理。[1]
工信部此前发布规定，在中国提供VPN服务的公司必须登记注册，否则将“不会受到中国法律的保护”

工作原理编辑
通常情况下，VPN网关采取双网卡结构，外网卡使用公网IP接入Internet。
网络一(假定为公网internet)的终端A访问网络二(假定为公司内网)的终端B，其发出的访问数据包的目标地址为终端B的内部IP地址。
网络二的VPN网关在接收到终端A发出的访问数据包时对其目标地址进行检查，如果目标地址属于网络二的地址，则将该数据包进行封装，封装的方式根据所采用的VPN技术不同而不同，同时VPN网关会构造一个新VPN数据包，并将封装后的原数据包作为VPN数据包的负载，VPN数据包的目标地址为网络二的VPN网关的外部地址。
网络二的VPN网关将VPN数据包发送到Internet，由于VPN数据包的目标地址是网络一的VPN网关的外部地址，所以该数据包将被Internet中的路由正确地发送到网络二的VPN网关。
网络二的VPN网关对接收到的数据包进行检查，如果发现该数据包是从网络一的VPN网关发出的，即可判定该数据包为VPN数据包，并对该数据包进行解包处理。解包的过程主要是先将VPN数据包的包头剥离，再将数据包反向处理还原成原始的数据包。
网络二的VPN网关将还原后的原始数据包发送至目标终端B，由于原始数据包的目标地址是终端B的IP，所以该数据包能够被正确地发送到终端B。在终端B看来，它收到的数据包就和从终端A直接发过来的一样。
从终端B返回终端A的数据包处理过程和上述过程一样，这样两个网络内的终端就可以相互通讯了。
通过上述说明可以发现，在VPN网关对数据包进行处理时，有两个参数对于VPN通讯十分重要：原始数据包的目标地址（VPN目标地址）和远程VPN网关地址。根据VPN目标地址，VPN网关能够判断对哪些数据包进行VPN处理，对于不需要处理的数据包通常情况下可直接转发到上级路由；远程VPN网关地址则指定了处理后的VPN数据包发送的目标地址，即VPN隧道的另一端VPN网关地址。由于网络通讯是双向的，在进行VPN通讯时，隧道两端的VPN网关都必须知道VPN目标地址和与此对应的远端VPN网关地址。
分类标准编辑
根据不同的划分标准，VPN可以按几个标准进行分类划分：
1、按VPN的协议分类：
VPN的隧道协议主要有三种，PPTP、L2TP和IPSec，其中PPTP和L2TP协议工作在OSI模型的第二层，又称为二层隧道协议；IPSec是第三层隧道协议。
2、按VPN的应用分类：
（1）Access VPN（远程接入VPN）：客户端到网关，使用公网作为骨干网在设备之间传输VPN数据流量；
（2）Intranet VPN（内联网VPN）：网关到网关，通过公司的网络架构连接来自同公司的资源；
（3）Extranet VPN（外联网VPN）：与合作伙伴企业网构成Extranet，将一个公司与另一个公司的资源进行连接。
3、按所用的设备类型进行分类：
网络设备提供商针对不同客户的需求，开发出不同的VPN网络设备，主要为交换机、路由器和防火墙：
（1）路由器式VPN：路由器式VPN部署较容易，只要在路由器上添加VPN服务即可；
（2）交换机式VPN：主要应用于连接用户较少的VPN网络；
（3）防火墙式VPN：防火墙式VPN是最常见的一种VPN的实现方式，许多厂商都提供这种配置类型
4．按照实现原理划分：
（1）重叠VPN：此VPN需要用户自己建立端节点之间的VPN链路，主要包括：GRE、L2TP、IPSec等众多技术。
（2）对等VPN：由网络运营商在主干网上完成VPN通道的建立，主要包括MPLS、VPN技术。
实现方式编辑
VPN的实现有很多种方法，常用的有以下四种：
1．VPN服务器：在大型局域网中，可以通过在网络中心搭建VPN服务器的方法实现VPN。
2．软件VPN：可以通过专用的软件实现VPN。
3．硬件VPN：可以通过专用的硬件实现VPN。
4．集成VPN：某些硬件设备，如路由器、防火墙等，都含有VPN功能，但是一般拥有VPN功能的硬件设备通常都比没有这一功能的要贵。
常用VPN技术编辑
1．MPLS VPN是一种基于MPLS技术的IP VPN，是在网络路由和交换设备上应用MPLS（Multiprotocol Label Switching，多协议标记交换）技术，简化核心路由器的路由选择方式，利用结合传统路由技术的标记交换实现的IP虚拟专用网络（IP VPN）。MPLS优势在于将二层交换和三层路由技术结合起来，在解决VPN、服务分类和流量工程这些IP网络的重大问题时具有很优异的表现。因此，MPLS VPN在解决企业互连、提供各种新业务方面也越来越被运营商看好，成为在IP网络运营商提供增值业务的重要手段。MPLS VPN又可分为二层MPLS VPN（即MPLS L2 VPN）和三层MPLS VPN（即MPLS L3 VPN）。
2．SSL VPN是以HTTPS（Secure HTTP，安全的HTTP，即支持SSL的HTTP协议）为基础的VPN技术，工作在传输层和应用层之间。SSL VPN充分利用了SSL协议提供的基于证书的身份认证、数据加密和消息完整性验证机制，可以为应用层之间的通信建立安全连接。SSL VPN广泛应用于基于Web的远程安全接入，为用户远程访问公司内部网络提供了安全保证。
3．IPSec VPN是基于IPSec协议的VPN技术，由IPSec协议提供隧道安全保障。IPSec是一种由IETF设计的端到端的确保基于IP通讯的数据安全性的机制。它为Internet上传输的数据提供了高质量的、可互操作的、基于密码学的安全保证。
常见问题编辑
错误691：提示“由于域上的用户名和/或密码无效而拒绝访问”
一般的原因是VPN连接时输入的账户和/或密码不正确，或是没有使用VPN服务的权限。
VPN一个账号默认仅限一台电脑使用，检查您的用户名有无登录重复。
若您是在使用的途中掉线了，不要急着再次连接，请耐心等待几分钟。
若还是提示错误，请联系网络管理员。
错误691：提示“端口已断开连接”
市面上有一小部分的路由器对VPN支持不好，从而引起错误691、只能连接几台机、经常掉线等多种问题，有时候还会出现错误800。原因是路由器采用NAT方式，不能让VPN协议穿透。
如果计算机中开启了系统防火墙，可以先关闭后再重试。
如果偶尔出现，重拨几次，或者重新启动计算机及路由器后再重试。
如果是通过局域网或者通过路由器上网的用户，请网络管理员在服务器或者路由器上打开UDP端口1701~1704。
如果路由器中不能设置，可以尝试将计算机直接连到外网，用单机拨号方式连接互联网，再重试VPN拨号。
部分网络如校园网、广电网、长城宽带、宽带通，容易出现691错误，需要与网络接入部门联系。
安装了简化版的操作系统容易缺少相关组件，可以下载安装错误691注册表文件。
错误721：提示“远程计算机没反应”
这种情况可能是网络延迟造成的，可以多连几次试试，如果还是不行，可以尝试以下解决方法：
单击“开始”，然后单击“运行”。
在“运行”中，键入regedit.exe，然后单击“确定”。
在注册表编辑器中，找到以下子项：HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002bE10318}/<000x>，其中<000x>是WAN微型端口（PPTP）驱动程序的网络适配器。
在“编辑”菜单上，指向“新建”，然后单击“DWORD 值”。
键入ValidateAddress，然后按 Enter。该值的默认设置为“1”（打开）；因此，您可以通过将其设置为“0”将其关闭。
退出注册表编辑器。
重新启动计算机。
错误742/741：提示“远程服务器不支持加密”
选择VPN连接，右键属性，点击安全。
在数据加密项选择“没有加密也可以连接”（Win7下点击网络共享中心—更改适配器—点击VPN连接图标—查看属性—安全数据加密—选择“没有加密也可以连接”）。
错误800：提示是“不能建立VPN连接，VPN服务器不能到达”
如果计算机中开启了系统防火墙，可以先关闭后再重试。
如果有安装路由器的用户，建议重启一下路由器。
部分网络如校园网、广电网、长城宽带、宽带通，容易出现800错误，需要与网络接入部门联系。
桌面右键单击“我的电脑”或“计算机”，打开“管理”，在“服务和应用程序”中，点击“服务”，找到“IPsec Policy Agent”服务，检查有没有禁用该服务。如果为禁用状态则改为自动状态，启动该服务。
错误619
如果打开了防火墙（包括系统自带的）：关闭防火墙，或者设置防火墙允许UDP 1701端口。
使用路由器上网：不使用路由器，或者映射UDP 1701端口。
如果无以上两种现象存在，但是还出现619错误：关闭所有正在使用网络的软件，重新启动计算机然后重新进行连接。
连上国外VPN后打开国内网页速度很慢
因为连接上了VPN的国外线路，本地网络出口已经变更为了国家带宽出口，因此在连接VPN的状态下访问国内的网页速度是比较慢的，可简单理解成：因为线路的传输需要从国内到国外，再从国外返回国内。而如果是访问国外网页的话，此时线路方式从国内直接传输到国外是相对最快的。而且还取决于您所选的线路距离，如果您选择的是美国的线路，那么访问国内的网页肯定较慢。
移动终端连接不上
当前网络是3G网络：3G网络通常都不稳定，不保证每次都可以连接上。
如果正在办公室使用公司的无线网络但连不上VPN或发生无法响应PPTP服务器错误：请详细咨询相关人员所处的网络宽带服务商是否支持VPN，其次看所处的网络路由器是否禁止了VPN端口。
电脑上可以连接VPN，但手机就不行：请确认电脑中的VPN是否处于“正在连接”的状态，如果是，请先断开电脑中的，再次连接手机试试。请注意一个账号不能同时登录在两个设备中。
错误789
连接尝试失败，因为安全层在初始化与远程计算机的协商时遇到一个处理错误
1. 单击“开始”，单击“运行”，键入“regedit”，然后单击“确定”
2. 找到下面的注册表子项，然后单击它：
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters
3. 在“编辑”菜单上，单击“新建”->“DWORD值”
4. 在“名称”框中，键入“ProhibitIpSec”
5. 在“数值数据”框中，键入“1”，然后单击“确定”
6. 退出注册表编辑器，然后重新启动计算机
评价编辑
优点

VPN能够让移动员工、远程员工、商务合作伙伴和其他人利用本地可用的高速宽带网连接（如DSL、有线电视或者WiFi网络）连接到企业网络。此外，高速宽带网连接提供一种成本效率高的连接远程办公室的方法。
设计良好的宽带VPN是模块化的和可升级的。VPN能够让应用者使用一种很容易设置的互联网基础设施，让新的用户迅速和轻松地添加到这个网络。这种能力意味着企业不用增加额外的基础设施就可以提供大量的容量和应用。
VPN能提供高水平的安全，使用高级的加密和身份识别协议保护数据避免受到窥探，阻止数据窃贼和其他非授权用户接触这种数据。
完全控制，虚拟专用网使用户可以利用ISP的设施和服务，同时又完全掌握着自己网络的控制权。用户只利用ISP提供的网络资源，对于其它的安全设置、网络管理变化可由自己管理。在企业内部也可以自己建立虚拟专用网。
缺点

企业不能直接控制基于互联网的VPN的可靠性和性能。机构必须依靠提供VPN的互联网服务提供商保证服务的运行。这个因素使企业与互联网服务提供商签署一个服务级协议非常重要，要签署一个保证各种性能指标的协议。
企业创建和部署VPN线路并不容易。这种技术需要高水平地理解网络和安全问题，需要认真的规划和配置。因此，选择互联网服务提供商负责运行VPN的大多数事情是一个好主意。
不同厂商的VPN产品和解决方案总是不兼容的，因为许多厂商不愿意或者不能遵守VPN技术标准。因此，混合使用不同厂商的产品可能会出现技术问题。另一方面，使用一家供应商的设备可能会提高成本。
当使用无线设备时，VPN有安全风险。在接入点之间漫游特别容易出问题。当用户在接入点之间漫游的时候，任何使用高级加密技术的解决方案都可能被攻破。
各个系统下VPN的登陆配置编辑
Windows XP

建立一个新连接；
选择“连接到我工作的地方的网络”；
选择“虚拟专用网络连接”；
设定连接名称（例如：VPN）；
输入主机名称或公网IP地址；
完成新增连接，勾选“将这个连接的快捷方式加到我的桌面”（以便日后连接）；
输入账号，密码，即可连接。
Windows 7

在画面右下角，点选网络连接，然后选择“打开网络共享中心”；
在弹出的对话窗口中，选择“设置新的连接或网络”；
选择“连接到工作区”，然后选择“使用我的Internet连接（VPN），通过Internet使用虚拟专用网络（VPN）来连接”，然后单击“我将稍后设置Internet连接”；
在“Internet 地址”里，填上VPN提供的IP地址。填好IP后，其它东西都不用管它，直接点击下一步。目标名称填写“VPN连接”；
填VPN的用户名和密码，先不要填，点“创建”；
到这里就完成的连接设置导向。点击“关闭”。；
回到桌面右键点击“网络”->“属性”，再点击一下左边的“更改适配器设置”；
找到刚才建好的“VPN连接”并双击打开；
填写提供的VPN用户名和密码，“域”可以不用填写。然后点击属性->安全；
在“数据加密”这一项选中“可选加密（没有加密也可以连接）”选好后点击“确定”。VPN类型自动，使用这些协议选择CHAP，MS-CHAP v2；
整个Windows7 VPN过程都设置完成了。点击“连接”就可以了。
Ubuntu

1.画面右上角最右端图标单击，选择“系统设置”
2.选择“网络”，选择添加网络，接口VPN，创建。
Android

打开手机主菜单，选择“设置”；
选择“无线和网络”；
选择“虚拟专用网设置”；
选择“添加虚拟专用网”；
选择PPTP方式；
输入虚拟专用网名称（如VPN）；
填写服务器域名，点击“确定”。然后按menu键，保存设置；
点击打开刚刚建好的连接，填写用户名和密码，点击“连接”。
iOS

点击桌面上的“设置”图标进入设置；
点击“通用”进入通用设置；
点击“网络”，进入网络设置；
点击“VPN”进入设置；
点击“添加VPN配置”；
在协议类型上选择“PPTP”，在“描述”栏中填入“VPN”，在服务器栏中填入服务器域名，在账户和密码栏中填入用户名和密码，其他设置保持不变，然后点击“存储”。；
点击“VPN”开关，就会开启连接，连接成功后，右上角会出现小图标。
OS X

从任务栏菜单打开系统设置，选择“网络”；
在新对话框中选择“添加”，然后从下拉菜单选择“VPN”；
从VPN类型下拉菜单中选择PPTP。填写服务名称，点击“创建”按钮；
在配置下拉菜单中选择“增加配置”；
填写服务器地址，用户名；
点击“认证配置”按钮，在弹出的对话框中选择“密码”单选框，并输入密码；
回到主设置框，点击“应用”保存设置即可。
相关法律法规编辑
2003年4月，信息产业部颁发了《电信业务分类目录》，取消了国际电信业务的分类，同时将虚拟专用网业务自基础电信业务中分离出来，成为独立的增值电信业务分类。但是此处的“虚拟专用网”概念与行业内的VPN业务是不一样的。新的《电信业务分类目录》中对该分类的解释是：国内因特网虚拟专用网业务（IP-VPN）是指经营者利用自有的或租用公用因特网网络资源，采用TCP/IP协议，为国内用户定制因特网闭合用户群网络的服务。这种分类的解释强调了两个特点，一个是利用因特网网络资源，一个是采用TCP/IP协议。这种解释是与当时的市场状况所对应的，当时关注的是基于互连网的IPSec VPN，虽然该解释可以基本涵盖后出现的SSL VPN模式，但并没有关注MPLS VPN。
2003年8月，信息产业部发布《关于组织开展国内多方通信服务等三项电信业务商用试验的通知》，就“国内多方通信服务业务”、“在线数据处理与交易处理业务”、“国内因特网虚拟专用网业务”等三项增值电信业务组织开展商用试验，有效期至2004年8月底。
2004年11月，信息产业部发布《关于继续开展国内多方通信服务等三项增值电信业务商用试验的通告》，决定将以上三项增值电信业务商用试验期延长一年，至2005年8月31日。
2006年1月，信息产业部发布《关于两项增值电信业务及国内多方通信服务的通告》，正式开放“国内因特网虚拟专用网业务”和“在线数据处理与交易处理业务”两项增值电信业务，上述两项增值电信业务由商用试验转为正式商用。
2008年，正式颁发IP-VPN业务牌照。名为IPSec VPN的中国“国内因特网虚拟专用网”增值电信业务许可证自其诞生之日起即以MPLS VPN为发展方向，导致VPN市场无规可循，实际上是在“灰色运营”。
2013年，工业与信息化部公布的《电信业务分类目录（征求意见稿）》中仍然没有对此作出任何改变。
2015年1月27日，工信部回应VPN被封事件，表示一些不良信息应该按照中国法律进行管理。[1]
工信部此前发布规定，在中国提供VPN服务的公司必须登记注册，否则将“不会受到中国法律的保护”

工作原理编辑
通常情况下，VPN网关采取双网卡结构，外网卡使用公网IP接入Internet。
网络一(假定为公网internet)的终端A访问网络二(假定为公司内网)的终端B，其发出的访问数据包的目标地址为终端B的内部IP地址。
网络二的VPN网关在接收到终端A发出的访问数据包时对其目标地址进行检查，如果目标地址属于网络二的地址，则将该数据包进行封装，封装的方式根据所采用的VPN技术不同而不同，同时VPN网关会构造一个新VPN数据包，并将封装后的原数据包作为VPN数据包的负载，VPN数据包的目标地址为网络二的VPN网关的外部地址。
网络二的VPN网关将VPN数据包发送到Internet，由于VPN数据包的目标地址是网络一的VPN网关的外部地址，所以该数据包将被Internet中的路由正确地发送到网络二的VPN网关。
网络二的VPN网关对接收到的数据包进行检查，如果发现该数据包是从网络一的VPN网关发出的，即可判定该数据包为VPN数据包，并对该数据包进行解包处理。解包的过程主要是先将VPN数据包的包头剥离，再将数据包反向处理还原成原始的数据包。
网络二的VPN网关将还原后的原始数据包发送至目标终端B，由于原始数据包的目标地址是终端B的IP，所以该数据包能够被正确地发送到终端B。在终端B看来，它收到的数据包就和从终端A直接发过来的一样。
从终端B返回终端A的数据包处理过程和上述过程一样，这样两个网络内的终端就可以相互通讯了。
通过上述说明可以发现，在VPN网关对数据包进行处理时，有两个参数对于VPN通讯十分重要：原始数据包的目标地址（VPN目标地址）和远程VPN网关地址。根据VPN目标地址，VPN网关能够判断对哪些数据包进行VPN处理，对于不需要处理的数据包通常情况下可直接转发到上级路由；远程VPN网关地址则指定了处理后的VPN数据包发送的目标地址，即VPN隧道的另一端VPN网关地址。由于网络通讯是双向的，在进行VPN通讯时，隧道两端的VPN网关都必须知道VPN目标地址和与此对应的远端VPN网关地址。
分类标准编辑
根据不同的划分标准，VPN可以按几个标准进行分类划分：
1、按VPN的协议分类：
VPN的隧道协议主要有三种，PPTP、L2TP和IPSec，其中PPTP和L2TP协议工作在OSI模型的第二层，又称为二层隧道协议；IPSec是第三层隧道协议。
2、按VPN的应用分类：
（1）Access VPN（远程接入VPN）：客户端到网关，使用公网作为骨干网在设备之间传输VPN数据流量；
（2）Intranet VPN（内联网VPN）：网关到网关，通过公司的网络架构连接来自同公司的资源；
（3）Extranet VPN（外联网VPN）：与合作伙伴企业网构成Extranet，将一个公司与另一个公司的资源进行连接。
3、按所用的设备类型进行分类：
网络设备提供商针对不同客户的需求，开发出不同的VPN网络设备，主要为交换机、路由器和防火墙：
（1）路由器式VPN：路由器式VPN部署较容易，只要在路由器上添加VPN服务即可；
（2）交换机式VPN：主要应用于连接用户较少的VPN网络；
（3）防火墙式VPN：防火墙式VPN是最常见的一种VPN的实现方式，许多厂商都提供这种配置类型
4．按照实现原理划分：
（1）重叠VPN：此VPN需要用户自己建立端节点之间的VPN链路，主要包括：GRE、L2TP、IPSec等众多技术。
（2）对等VPN：由网络运营商在主干网上完成VPN通道的建立，主要包括MPLS、VPN技术。
实现方式编辑
VPN的实现有很多种方法，常用的有以下四种：
1．VPN服务器：在大型局域网中，可以通过在网络中心搭建VPN服务器的方法实现VPN。
2．软件VPN：可以通过专用的软件实现VPN。
3．硬件VPN：可以通过专用的硬件实现VPN。
4．集成VPN：某些硬件设备，如路由器、防火墙等，都含有VPN功能，但是一般拥有VPN功能的硬件设备通常都比没有这一功能的要贵。
常用VPN技术编辑
1．MPLS VPN是一种基于MPLS技术的IP VPN，是在网络路由和交换设备上应用MPLS（Multiprotocol Label Switching，多协议标记交换）技术，简化核心路由器的路由选择方式，利用结合传统路由技术的标记交换实现的IP虚拟专用网络（IP VPN）。MPLS优势在于将二层交换和三层路由技术结合起来，在解决VPN、服务分类和流量工程这些IP网络的重大问题时具有很优异的表现。因此，MPLS VPN在解决企业互连、提供各种新业务方面也越来越被运营商看好，成为在IP网络运营商提供增值业务的重要手段。MPLS VPN又可分为二层MPLS VPN（即MPLS L2 VPN）和三层MPLS VPN（即MPLS L3 VPN）。
2．SSL VPN是以HTTPS（Secure HTTP，安全的HTTP，即支持SSL的HTTP协议）为基础的VPN技术，工作在传输层和应用层之间。SSL VPN充分利用了SSL协议提供的基于证书的身份认证、数据加密和消息完整性验证机制，可以为应用层之间的通信建立安全连接。SSL VPN广泛应用于基于Web的远程安全接入，为用户远程访问公司内部网络提供了安全保证。
3．IPSec VPN是基于IPSec协议的VPN技术，由IPSec协议提供隧道安全保障。IPSec是一种由IETF设计的端到端的确保基于IP通讯的数据安全性的机制。它为Internet上传输的数据提供了高质量的、可互操作的、基于密码学的安全保证。
常见问题编辑
错误691：提示“由于域上的用户名和/或密码无效而拒绝访问”
一般的原因是VPN连接时输入的账户和/或密码不正确，或是没有使用VPN服务的权限。
VPN一个账号默认仅限一台电脑使用，检查您的用户名有无登录重复。
若您是在使用的途中掉线了，不要急着再次连接，请耐心等待几分钟。
若还是提示错误，请联系网络管理员。
错误691：提示“端口已断开连接”
市面上有一小部分的路由器对VPN支持不好，从而引起错误691、只能连接几台机、经常掉线等多种问题，有时候还会出现错误800。原因是路由器采用NAT方式，不能让VPN协议穿透。
如果计算机中开启了系统防火墙，可以先关闭后再重试。
如果偶尔出现，重拨几次，或者重新启动计算机及路由器后再重试。
如果是通过局域网或者通过路由器上网的用户，请网络管理员在服务器或者路由器上打开UDP端口1701~1704。
如果路由器中不能设置，可以尝试将计算机直接连到外网，用单机拨号方式连接互联网，再重试VPN拨号。
部分网络如校园网、广电网、长城宽带、宽带通，容易出现691错误，需要与网络接入部门联系。
安装了简化版的操作系统容易缺少相关组件，可以下载安装错误691注册表文件。
错误721：提示“远程计算机没反应”
这种情况可能是网络延迟造成的，可以多连几次试试，如果还是不行，可以尝试以下解决方法：
单击“开始”，然后单击“运行”。
在“运行”中，键入regedit.exe，然后单击“确定”。
在注册表编辑器中，找到以下子项：HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002bE10318}/<000x>，其中<000x>是WAN微型端口（PPTP）驱动程序的网络适配器。
在“编辑”菜单上，指向“新建”，然后单击“DWORD 值”。
键入ValidateAddress，然后按 Enter。该值的默认设置为“1”（打开）；因此，您可以通过将其设置为“0”将其关闭。
退出注册表编辑器。
重新启动计算机。
错误742/741：提示“远程服务器不支持加密”
选择VPN连接，右键属性，点击安全。
在数据加密项选择“没有加密也可以连接”（Win7下点击网络共享中心—更改适配器—点击VPN连接图标—查看属性—安全数据加密—选择“没有加密也可以连接”）。
错误800：提示是“不能建立VPN连接，VPN服务器不能到达”
如果计算机中开启了系统防火墙，可以先关闭后再重试。
如果有安装路由器的用户，建议重启一下路由器。
部分网络如校园网、广电网、长城宽带、宽带通，容易出现800错误，需要与网络接入部门联系。
桌面右键单击“我的电脑”或“计算机”，打开“管理”，在“服务和应用程序”中，点击“服务”，找到“IPsec Policy Agent”服务，检查有没有禁用该服务。如果为禁用状态则改为自动状态，启动该服务。
错误619
如果打开了防火墙（包括系统自带的）：关闭防火墙，或者设置防火墙允许UDP 1701端口。
使用路由器上网：不使用路由器，或者映射UDP 1701端口。
如果无以上两种现象存在，但是还出现619错误：关闭所有正在使用网络的软件，重新启动计算机然后重新进行连接。
连上国外VPN后打开国内网页速度很慢
因为连接上了VPN的国外线路，本地网络出口已经变更为了国家带宽出口，因此在连接VPN的状态下访问国内的网页速度是比较慢的，可简单理解成：因为线路的传输需要从国内到国外，再从国外返回国内。而如果是访问国外网页的话，此时线路方式从国内直接传输到国外是相对最快的。而且还取决于您所选的线路距离，如果您选择的是美国的线路，那么访问国内的网页肯定较慢。
移动终端连接不上
当前网络是3G网络：3G网络通常都不稳定，不保证每次都可以连接上。
如果正在办公室使用公司的无线网络但连不上VPN或发生无法响应PPTP服务器错误：请详细咨询相关人员所处的网络宽带服务商是否支持VPN，其次看所处的网络路由器是否禁止了VPN端口。
电脑上可以连接VPN，但手机就不行：请确认电脑中的VPN是否处于“正在连接”的状态，如果是，请先断开电脑中的，再次连接手机试试。请注意一个账号不能同时登录在两个设备中。
错误789
连接尝试失败，因为安全层在初始化与远程计算机的协商时遇到一个处理错误
1. 单击“开始”，单击“运行”，键入“regedit”，然后单击“确定”
2. 找到下面的注册表子项，然后单击它：
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters
3. 在“编辑”菜单上，单击“新建”->“DWORD值”
4. 在“名称”框中，键入“ProhibitIpSec”
5. 在“数值数据”框中，键入“1”，然后单击“确定”
6. 退出注册表编辑器，然后重新启动计算机
评价编辑
优点

VPN能够让移动员工、远程员工、商务合作伙伴和其他人利用本地可用的高速宽带网连接（如DSL、有线电视或者WiFi网络）连接到企业网络。此外，高速宽带网连接提供一种成本效率高的连接远程办公室的方法。
设计良好的宽带VPN是模块化的和可升级的。VPN能够让应用者使用一种很容易设置的互联网基础设施，让新的用户迅速和轻松地添加到这个网络。这种能力意味着企业不用增加额外的基础设施就可以提供大量的容量和应用。
VPN能提供高水平的安全，使用高级的加密和身份识别协议保护数据避免受到窥探，阻止数据窃贼和其他非授权用户接触这种数据。
完全控制，虚拟专用网使用户可以利用ISP的设施和服务，同时又完全掌握着自己网络的控制权。用户只利用ISP提供的网络资源，对于其它的安全设置、网络管理变化可由自己管理。在企业内部也可以自己建立虚拟专用网。
缺点

企业不能直接控制基于互联网的VPN的可靠性和性能。机构必须依靠提供VPN的互联网服务提供商保证服务的运行。这个因素使企业与互联网服务提供商签署一个服务级协议非常重要，要签署一个保证各种性能指标的协议。
企业创建和部署VPN线路并不容易。这种技术需要高水平地理解网络和安全问题，需要认真的规划和配置。因此，选择互联网服务提供商负责运行VPN的大多数事情是一个好主意。
不同厂商的VPN产品和解决方案总是不兼容的，因为许多厂商不愿意或者不能遵守VPN技术标准。因此，混合使用不同厂商的产品可能会出现技术问题。另一方面，使用一家供应商的设备可能会提高成本。
当使用无线设备时，VPN有安全风险。在接入点之间漫游特别容易出问题。当用户在接入点之间漫游的时候，任何使用高级加密技术的解决方案都可能被攻破。
各个系统下VPN的登陆配置编辑
Windows XP

建立一个新连接；
选择“连接到我工作的地方的网络”；
选择“虚拟专用网络连接”；
设定连接名称（例如：VPN）；
输入主机名称或公网IP地址；
完成新增连接，勾选“将这个连接的快捷方式加到我的桌面”（以便日后连接）；
输入账号，密码，即可连接。
Windows 7

在画面右下角，点选网络连接，然后选择“打开网络共享中心”；
在弹出的对话窗口中，选择“设置新的连接或网络”；
选择“连接到工作区”，然后选择“使用我的Internet连接（VPN），通过Internet使用虚拟专用网络（VPN）来连接”，然后单击“我将稍后设置Internet连接”；
在“Internet 地址”里，填上VPN提供的IP地址。填好IP后，其它东西都不用管它，直接点击下一步。目标名称填写“VPN连接”；
填VPN的用户名和密码，先不要填，点“创建”；
到这里就完成的连接设置导向。点击“关闭”。；
回到桌面右键点击“网络”->“属性”，再点击一下左边的“更改适配器设置”；
找到刚才建好的“VPN连接”并双击打开；
填写提供的VPN用户名和密码，“域”可以不用填写。然后点击属性->安全；
在“数据加密”这一项选中“可选加密（没有加密也可以连接）”选好后点击“确定”。VPN类型自动，使用这些协议选择CHAP，MS-CHAP v2；
整个Windows7 VPN过程都设置完成了。点击“连接”就可以了。
Ubuntu

1.画面右上角最右端图标单击，选择“系统设置”
2.选择“网络”，选择添加网络，接口VPN，创建。
Android

打开手机主菜单，选择“设置”；
选择“无线和网络”；
选择“虚拟专用网设置”；
选择“添加虚拟专用网”；
选择PPTP方式；
输入虚拟专用网名称（如VPN）；
填写服务器域名，点击“确定”。然后按menu键，保存设置；
点击打开刚刚建好的连接，填写用户名和密码，点击“连接”。
iOS

点击桌面上的“设置”图标进入设置；
点击“通用”进入通用设置；
点击“网络”，进入网络设置；
点击“VPN”进入设置；
点击“添加VPN配置”；
在协议类型上选择“PPTP”，在“描述”栏中填入“VPN”，在服务器栏中填入服务器域名，在账户和密码栏中填入用户名和密码，其他设置保持不变，然后点击“存储”。；
点击“VPN”开关，就会开启连接，连接成功后，右上角会出现小图标。
OS X

从任务栏菜单打开系统设置，选择“网络”；
在新对话框中选择“添加”，然后从下拉菜单选择“VPN”；
从VPN类型下拉菜单中选择PPTP。填写服务名称，点击“创建”按钮；
在配置下拉菜单中选择“增加配置”；
填写服务器地址，用户名；
点击“认证配置”按钮，在弹出的对话框中选择“密码”单选框，并输入密码；
回到主设置框，点击“应用”保存设置即可。
相关法律法规编辑
2003年4月，信息产业部颁发了《电信业务分类目录》，取消了国际电信业务的分类，同时将虚拟专用网业务自基础电信业务中分离出来，成为独立的增值电信业务分类。但是此处的“虚拟专用网”概念与行业内的VPN业务是不一样的。新的《电信业务分类目录》中对该分类的解释是：国内因特网虚拟专用网业务（IP-VPN）是指经营者利用自有的或租用公用因特网网络资源，采用TCP/IP协议，为国内用户定制因特网闭合用户群网络的服务。这种分类的解释强调了两个特点，一个是利用因特网网络资源，一个是采用TCP/IP协议。这种解释是与当时的市场状况所对应的，当时关注的是基于互连网的IPSec VPN，虽然该解释可以基本涵盖后出现的SSL VPN模式，但并没有关注MPLS VPN。
2003年8月，信息产业部发布《关于组织开展国内多方通信服务等三项电信业务商用试验的通知》，就“国内多方通信服务业务”、“在线数据处理与交易处理业务”、“国内因特网虚拟专用网业务”等三项增值电信业务组织开展商用试验，有效期至2004年8月底。
2004年11月，信息产业部发布《关于继续开展国内多方通信服务等三项增值电信业务商用试验的通告》，决定将以上三项增值电信业务商用试验期延长一年，至2005年8月31日。
2006年1月，信息产业部发布《关于两项增值电信业务及国内多方通信服务的通告》，正式开放“国内因特网虚拟专用网业务”和“在线数据处理与交易处理业务”两项增值电信业务，上述两项增值电信业务由商用试验转为正式商用。
2008年，正式颁发IP-VPN业务牌照。名为IPSec VPN的中国“国内因特网虚拟专用网”增值电信业务许可证自其诞生之日起即以MPLS VPN为发展方向，导致VPN市场无规可循，实际上是在“灰色运营”。
2013年，工业与信息化部公布的《电信业务分类目录（征求意见稿）》中仍然没有对此作出任何改变。
2015年1月27日，工信部回应VPN被封事件，表示一些不良信息应该按照中国法律进行管理。[1]
工信部此前发布规定，在中国提供VPN服务的公司必须登记注册，否则将“不会受到中国法律的保护”


Better to use a relative file path since all of these files are in the repo. I might check it out but to run your code I actually need to modify it.


Are those same as described here http://www.espruino.com/Reference#l__global_setWatch or something else?


C++って使っていいの？？


In Doxygen, if you wish to comment about the return value of a function, you prefix the comment with "\return".


Avoid using generic name `array` for representing the shared data.


be consistent in querying elements from DOM-tree plz
getElementById or jQuery selectors, you can choose only one


In this case, there doesn't appear to be.  It might be better if we changed the marker to be a "->" or something else as it might confuse folks when there is no obvious return.  Thankfully, this is just a debug statement that will be commented out or removed when the beta has completed.


TeamCity OSS :: Kubernetes Mesos :: 5 - Smoke Tests (docker/mesos) [Build 605](https://teamcity.mesosphere.io/viewLog.html?buildId=57808&buildTypeId=Oss_KubernetesMesos_5SmokeTestsDockerMesos&guest=1) outcome was **SUCCESS**
Summary: Tests passed: 1, ignored: 188 Build time: 00:04:00


I love how I noticed the integer division but not the wrong inequality direction. (Fixed.)


Perhaps `includeFixupCommits` should be named `include**s**FixupCommits` or `hasFixupCommits` to indicate this tests a conditio & returns boolean. `include` prefix is more command-like, indicating state change.