↧
年代向錢看 金融战开打
↧
齊秦 - 外面的世界
我们那个年代的流行曲
↧
↧
未普:美中祭出杀手鐧意味著甚么?——谈贸易战升级
特朗普和习近平在六月底大阪峰会上营造的和缓气氛,这几天迅速变味。两国互相抱怨,纷纷祭出杀手鐧,甚至一招比一招狠,狠得似乎不在乎彻底撕破脸。这引发举世担忧。
当两国贸易谈判代表团数日前结束上海谈判时,白宫前脚刚宣称,两国谈判有建设性,特朗普后脚就发布推文,将在9月1日起对中国3000亿美元的进口产品征10%的关税。中国官员回应说,如果特朗普兑现他的这个威胁,中国将拿出反制措施。可是还没有等到特朗普实施他的额外关税,中国已经迫不及待地拿出了反制措施:人民币贬值。
美国不遑多让,随即以自己的杀手鐧回应,宣布中国为汇率操纵国。这是特朗普自2016年总统竞选时就经常威胁会使用的对中制裁措施,而在过去的25年中,中国从未被列为汇率操纵国,包括美国财政部今年5月发布的汇率报告。至此,美中贸易战升级到一个双方争狠斗勇的危险阶段——汇率战。
人民币汇率「破7」,一直是中国政府自2008年以来试图避免的关口,被一些西方分析师称为经济武器。而指控中国为汇率操纵国,也是美国方面屡次威胁而屡次落空的一招。那么,为何曾经小心翼翼的美中两国政府,这一次突然都不在乎彻底撕破脸而采取激烈对抗的姿态?
依我之见,中国摆出与美国激烈对抗的姿态,显然要传递这样几个信号:第一,习近平认为特朗普的一些做法是极限施压,中国无法接受。这次特朗普突然祭出的新关税就是一种新的极限施压,是中美关系骤然变坏的触发点,所以特应对此负责,对全球动荡的股市负责,因为在他突然采取新关税动作前,市场是稳定的。
第二,中国用「破7」报复美国,实际上是习近平报复特朗普,并且在中共高层可能已达成共识。《华尔街日报》称,人民币「破七」,传获中国决策当局首肯。虽然中国人民银行否认人民币贬值是对美国关税的反击,但没有人相信这种说辞。
第三,同美国达成贸易协议,中国可能已不再抱有期望。中国对美国想要更改其在WTO中的「发展中国家地位」非常恼火。中国发现,可能必须要准备好与美国打持久战,不在乎与美国扩大冲突,因此用激烈的手段报复美国,几乎不留后路。
至于美国摆出与中国激烈对抗的姿态,肯定也是要传递几个信号。第一,特朗普对他的「好朋友习近平」感到非常失望,甚至恼怒。他没有办法逼迫习近平就范,也无法迫使中国承诺经济改革。特朗普对习近平既没有兑现立即购买美国农产品的诺言,也没有兑现关于限制Opioid(鸦片类药物)出口的诺言,所以认为中国已经丧失了诚意。(早该知道共匪就是一帮毫无诚信之徒)
当两国贸易谈判代表团数日前结束上海谈判时,白宫前脚刚宣称,两国谈判有建设性,特朗普后脚就发布推文,将在9月1日起对中国3000亿美元的进口产品征10%的关税。中国官员回应说,如果特朗普兑现他的这个威胁,中国将拿出反制措施。可是还没有等到特朗普实施他的额外关税,中国已经迫不及待地拿出了反制措施:人民币贬值。
美国不遑多让,随即以自己的杀手鐧回应,宣布中国为汇率操纵国。这是特朗普自2016年总统竞选时就经常威胁会使用的对中制裁措施,而在过去的25年中,中国从未被列为汇率操纵国,包括美国财政部今年5月发布的汇率报告。至此,美中贸易战升级到一个双方争狠斗勇的危险阶段——汇率战。
人民币汇率「破7」,一直是中国政府自2008年以来试图避免的关口,被一些西方分析师称为经济武器。而指控中国为汇率操纵国,也是美国方面屡次威胁而屡次落空的一招。那么,为何曾经小心翼翼的美中两国政府,这一次突然都不在乎彻底撕破脸而采取激烈对抗的姿态?
依我之见,中国摆出与美国激烈对抗的姿态,显然要传递这样几个信号:第一,习近平认为特朗普的一些做法是极限施压,中国无法接受。这次特朗普突然祭出的新关税就是一种新的极限施压,是中美关系骤然变坏的触发点,所以特应对此负责,对全球动荡的股市负责,因为在他突然采取新关税动作前,市场是稳定的。
第二,中国用「破7」报复美国,实际上是习近平报复特朗普,并且在中共高层可能已达成共识。《华尔街日报》称,人民币「破七」,传获中国决策当局首肯。虽然中国人民银行否认人民币贬值是对美国关税的反击,但没有人相信这种说辞。
第三,同美国达成贸易协议,中国可能已不再抱有期望。中国对美国想要更改其在WTO中的「发展中国家地位」非常恼火。中国发现,可能必须要准备好与美国打持久战,不在乎与美国扩大冲突,因此用激烈的手段报复美国,几乎不留后路。
至于美国摆出与中国激烈对抗的姿态,肯定也是要传递几个信号。第一,特朗普对他的「好朋友习近平」感到非常失望,甚至恼怒。他没有办法逼迫习近平就范,也无法迫使中国承诺经济改革。特朗普对习近平既没有兑现立即购买美国农产品的诺言,也没有兑现关于限制Opioid(鸦片类药物)出口的诺言,所以认为中国已经丧失了诚意。(早该知道共匪就是一帮毫无诚信之徒)
第二,采取与中国激烈对抗,正是特朗普内阁中的鹰派的原有之意。值得注意的是,特朗普内阁对中国采取新的极限施压并未达成共识,3000亿可能只是特朗普和他的少数阁员的意见。据《华尔街日报》报道,这个决定遭到美国贸易代表莱特希泽、财政部长姆努钦、经济顾问库德洛以及国家安全顾问博尔顿的一致反对。但特朗普仍坚持己见,并得到了白宫顾问纳瓦罗的支持。
中国方面因此对纳瓦罗这位鹰派中的鹰派恨之入骨,这反应在《环球时报》的社评「纳瓦罗是经济顾问 还是政治煽动者」一文中。文章称,纳瓦罗使用天主教教义中的七宗原罪来比喻美中贸易冲突,毫无顾忌煽动大国之间的仇恨才是真正的罪恶。文章称他是促成白宫决定进一步加征中国产品关税的主要角色,是美方整体上言而无信、出尔反尔的关键搅局者。还认为,纳瓦罗不配位,劫持了白宫经济话语权,是中美经贸关系的悲哀。(共匪总是倒打一耙)
从中国的角度看,美中对抗似进入非理性阶段。但从美国强硬派的角度看,这种‘非理性’就是一种理性,狙击中国的快速崛起,已经成为美方的强有力的手段了。(太好了)
中国方面因此对纳瓦罗这位鹰派中的鹰派恨之入骨,这反应在《环球时报》的社评「纳瓦罗是经济顾问 还是政治煽动者」一文中。文章称,纳瓦罗使用天主教教义中的七宗原罪来比喻美中贸易冲突,毫无顾忌煽动大国之间的仇恨才是真正的罪恶。文章称他是促成白宫决定进一步加征中国产品关税的主要角色,是美方整体上言而无信、出尔反尔的关键搅局者。还认为,纳瓦罗不配位,劫持了白宫经济话语权,是中美经贸关系的悲哀。(共匪总是倒打一耙)
从中国的角度看,美中对抗似进入非理性阶段。但从美国强硬派的角度看,这种‘非理性’就是一种理性,狙击中国的快速崛起,已经成为美方的强有力的手段了。(太好了)
↧
go的包管理工具-glide
Package Management for Golang https://glide.sh
Q: Should I check
Glide: Vendor Package Management for Golang.
Are you used to tools such as Cargo, npm, Composer, Nuget, Pip, Maven, Bundler, or other modern package managers? If so, Glide is the comparable Go tool.
Manage your vendor and vendored packages with ease. Glide is a tool for managing the
vendor
directory within a Go package. This feature, first introduced in Go 1.5, allows each package to have a vendor
directory containing dependent packages for the project. These vendor packages can be installed by a tool (e.g. glide), similar to go get
or they can be vendored and distributed with the package.Go Modules
The Go community is now using Go Modules to handle dependencies. Please consider using that instead of Glide. Glide is now mostly unmaintained.
Features
- Ease dependency management
- Support versioning packages including Semantic Versioning 2.0.0 support. Any constraint the
github.com/Masterminds/semver
package can parse can be used. - Support aliasing packages (e.g. for working with github forks)
- Remove the need for munging import statements
- Work with all of the
go
tools - Support the VCS tools that Go supports:
- git
- bzr
- hg
- svn
- Support custom local and global plugins (see docs/plugins.md)
- Repository caching and data caching for improved performance.
- Flatten dependencies resolving version differences and avoiding the inclusion of a package multiple times.
- Manage and install dependencies on-demand or vendored in your version control system.
How It Works
Glide scans the source code of your application or library to determine the needed dependencies. To determine the versions and locations (such as aliases for forks) Glide reads a
glide.yaml
file with the rules. With this information Glide retrieves needed dependencies.When a dependent package is encountered its imports are scanned to determine dependencies of dependencies (transitive dependencies). If the dependent project contains a
glide.yaml
file that information is used to help determine the dependency rules when fetching from a location or version to use. Configuration from Godep, GB, GOM, and GPM is also imported.The dependencies are exported to the
vendor/
directory where the go
tools can find and use them. A glide.lock
file is generated containing all the dependencies, including transitive ones.The
glide init
command can be use to setup a new project, glide update
regenerates the dependency versions using scanning and rules, and glide install
will install the versions listed in the glide.lock
file, skipping scanning, unless the glide.lock
file is not found in which case it will perform an update.A project is structured like this:
- $GOPATH/src/myProject (Your project)
|
|-- glide.yaml
|
|-- glide.lock
|
|-- main.go (Your main go code can live here)
|
|-- mySubpackage (You can create your own subpackages, too)
| |
| |-- foo.go
|
|-- vendor
|-- github.com
|
|-- Masterminds
|
|-- ... etc.
Take a look at the Glide source code to see this philosophy in action.
Install
The easiest way to install the latest release on Mac or Linux is with the following script:
curl https://glide.sh/get | sh
On Mac OS X you can also install the latest release via Homebrew:
$ brew install glide
On Ubuntu Precise (12.04), Trusty (14.04), Wily (15.10) or Xenial (16.04) you can install from our PPA:
sudo add-apt-repository ppa:masterminds/glide && sudo apt-get update
sudo apt-get install glide
On Ubuntu Zesty (17.04) the package is called
golang-glide
.Binary packages are available for Mac, Linux and Windows.
For a development version it is also possible to
go get github.com/Masterminds/glide
.To build from source you can:
- Clone this repository into
$GOPATH/src/github.com/Masterminds/glide
and change directory into it - If you are using Go 1.5 ensure the environment variable GO15VENDOREXPERIMENT is set, for example by running
export GO15VENDOREXPERIMENT=1
. In Go 1.6 it is enabled by default and in Go 1.7 it is always enabled without the ability to turn it off. - Run
make build
This will leave you with
./glide
, which you can put in your $PATH
if you'd like. (You can also take a look at make install
to install for you.)The Glide repo has now been configured to use glide to manage itself, too.
Usage
$ glide create # Start a new workspace
$ open glide.yaml # and edit away!
$ glide get github.com/Masterminds/cookoo # Get a package and add to glide.yaml
$ glide install # Install packages and dependencies
# work, work, work
$ go build # Go tools work normally
$ glide up # Update to newest versions of the package
Check out the
glide.yaml
in this directory, or examples in the docs/
directory.glide create (aliased to init)
Initialize a new workspace. Among other things, this creates a
glide.yaml
file while attempting to guess the packages and versions to put in it. For example, if your project is using Godep it will use the versions specified there. Glide is smart enough to scan your codebase and detect the imports being used whether they are specified with another package manager or not.$ glide create
[INFO] Generating a YAML configuration file and guessing the dependencies
[INFO] Attempting to import from other package managers (use --skip-import to skip)
[INFO] Scanning code to look for dependencies
[INFO] --> Found reference to github.com/Masterminds/semver
[INFO] --> Found reference to github.com/Masterminds/vcs
[INFO] --> Found reference to github.com/codegangsta/cli
[INFO] --> Found reference to gopkg.in/yaml.v2
[INFO] Writing configuration file (glide.yaml)
[INFO] Would you like Glide to help you find ways to improve your glide.yaml configuration?
[INFO] If you want to revisit this step you can use the config-wizard command at any time.
[INFO] Yes (Y) or No (N)?
n
[INFO] You can now edit the glide.yaml file. Consider:
[INFO] --> Using versions and ranges. See https://glide.sh/docs/versions/
[INFO] --> Adding additional metadata. See https://glide.sh/docs/glide.yaml/
[INFO] --> Running the config-wizard command to improve the versions in your configuration
The
config-wizard
, noted here, can be run here or manually run at a later time. This wizard helps you figure out versions and ranges you can use for your dependencies.glide config-wizard
This runs a wizard that scans your dependencies and retrieves information on them to offer up suggestions that you can interactively choose. For example, it can discover if a dependency uses semantic versions and help you choose the version ranges to use.
glide get [package name]
You can download one or more packages to your
vendor
directory and have it added to your glide.yaml
file with glide get
.$ glide get github.com/Masterminds/cookoo
When
glide get
is used it will introspect the listed package to resolve its dependencies including using Godep, GPM, Gom, and GB config files.glide update (aliased to up)
Download or update all of the libraries listed in the
glide.yaml
file and put them in the vendor
directory. It will also recursively walk through the dependency packages to fetch anything that's needed and read in any configuration.$ glide up
This will recurse over the packages looking for other projects managed by Glide, Godep, gb, gom, and GPM. When one is found those packages will be installed as needed.
A
glide.lock
file will be created or updated with the dependencies pinned to specific versions. For example, if in the glide.yaml
file a version was specified as a range (e.g., ^1.2.3
) it will be set to a specific commit id in the glide.lock
file. That allows for reproducible installs (see glide install
).To remove any nested
vendor/
directories from fetched packages see the -v
flag.glide install
When you want to install the specific versions from the
glide.lock
file use glide install
.$ glide install
This will read the
glide.lock
file and install the commit id specific versions there.When the
glide.lock
file doesn't tie to the glide.yaml
file, such as there being a change, it will provide a warning. Running glide up
will recreate the glide.lock
file when updating the dependency tree.If no
glide.lock
file is present glide install
will perform an update
and generate a lock file.To remove any nested
vendor/
directories from fetched packages see the -v
flag.glide novendor (aliased to nv)
When you run commands like
go test ./...
it will iterate over all the subdirectories including the vendor
directory. When you are testing your application you may want to test your application files without running all the tests of your dependencies and their dependencies. This is where the novendor
command comes in. It lists all of the directories except vendor
.$ go test $(glide novendor)
This will run
go test
over all directories of your project except the vendor
directory.glide name
When you're scripting with Glide there are occasions where you need to know the name of the package you're working on.
glide name
returns the name of the package listed in the glide.yaml
file.glide tree
Glide includes a few commands that inspect code and give you details about what is imported.
glide tree
is one such command. Running it gives data like this:$ glide tree
github.com/Masterminds/glide
github.com/Masterminds/cookoo (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/cookoo)
github.com/Masterminds/cookoo/io (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/cookoo/io)
github.com/Masterminds/glide/cmd (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/cmd)
github.com/Masterminds/cookoo (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/cookoo)
github.com/Masterminds/cookoo/io (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/cookoo/io)
github.com/Masterminds/glide/gb (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/gb)
github.com/Masterminds/glide/util (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/util)
github.com/Masterminds/vcs (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/vcs)
github.com/Masterminds/glide/yaml (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/yaml)
github.com/Masterminds/glide/util (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/util)
github.com/Masterminds/vcs (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/vcs)
github.com/Masterminds/vcs (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/vcs)
gopkg.in/yaml.v2 (/Users/mfarina/Code/go/src/gopkg.in/yaml.v2)
github.com/Masterminds/semver (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/semver)
github.com/Masterminds/vcs (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/vcs)
github.com/codegangsta/cli (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/codegangsta/cli)
github.com/codegangsta/cli (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/codegangsta/cli)
github.com/Masterminds/cookoo (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/cookoo)
github.com/Masterminds/cookoo/io (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/cookoo/io)
github.com/Masterminds/glide/gb (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/gb)
github.com/Masterminds/glide/util (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/util)
github.com/Masterminds/vcs (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/vcs)
github.com/Masterminds/glide/yaml (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/yaml)
github.com/Masterminds/glide/util (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/util)
github.com/Masterminds/vcs (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/vcs)
github.com/Masterminds/vcs (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/vcs)
gopkg.in/yaml.v2 (/Users/mfarina/Code/go/src/gopkg.in/yaml.v2)
github.com/Masterminds/semver (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/semver)
github.com/Masterminds/vcs (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/vcs)
github.com/codegangsta/cli (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/codegangsta/cli)
This shows a tree of imports, excluding core libraries. Because vendoring makes it possible for the same package to live in multiple places,
glide tree
also prints the location of the package being imported.This command is deprecated and will be removed in the near future.
glide list
Glide's
list
command shows an alphabetized list of all the packages that a project imports.$ glide list
INSTALLED packages:
vendor/github.com/Masterminds/cookoo
vendor/github.com/Masterminds/cookoo/fmt
vendor/github.com/Masterminds/cookoo/io
vendor/github.com/Masterminds/cookoo/web
vendor/github.com/Masterminds/semver
vendor/github.com/Masterminds/vcs
vendor/github.com/codegangsta/cli
vendor/gopkg.in/yaml.v2
glide help
Print the glide help.
$ glide help
glide --version
Print the version and exit.
$ glide --version
glide version 0.12.0
glide.yaml
For full details on the
glide.yaml
files see the documentation.The
glide.yaml
file does two critical things:- It names the current package
- It declares external dependencies
A brief
glide.yaml
file looks like this:package: github.com/Masterminds/glide
import:
- package: github.com/Masterminds/semver
- package: github.com/Masterminds/cookoo
version: ^1.2.0
repo: git@github.com:Masterminds/cookoo.git
The above tells
glide
that...- This package is named
github.com/Masterminds/glide
- That this package depends on two libraries.
The first library exemplifies a minimal package import. It merely gives the fully qualified import path.
When Glide reads the definition for the second library, it will get the repo from the source in
repo
, checkout the latest version between 1.2.0 and 2.0.0, and put it in github.com/Masterminds/cookoo
in the vendor
directory. (Note that package
and repo
can be completely different)TIP: The version is either VCS dependent and can be anything that can be checked out or a semantic version constraint that can be parsed by the
github.com/ Masterminds/semver
package. For example, with Git this can be a branch, tag, or hash. This varies and depends on what's supported in the VCS.TIP: In general, you are advised to use the base package name for importing a package, not a subpackage name. For example, use
github.com/kylelemons/go-gypsy
and not github.com/kylelemons/go-gypsy/yaml
.Supported Version Control Systems
The Git, SVN, Mercurial (Hg), and Bzr source control systems are supported. This happens through the vcs package.
Frequently Asked Questions (F.A.Q.)
Q: Why does Glide have the concept of sub-packages when Go doesn't?
In Go every directory is a package. This works well when you have one repo containing all of your packages. When you have different packages in different VCS locations things become a bit more complicated. A project containing a collection of packages should be handled with the same information including the version. By grouping packages this way we are able to manage the related information.
Q: bzr (or hg) is not working the way I expected. Why?
These are works in progress, and may need some additional tuning. Please take a look at the vcs package. If you see a better way to handle it please let us know.
vendor/
into version control?
Q: Should I check That's up to you. It's not necessary, but it may also cause you extra work and lots of extra space in your VCS. There may also be unforeseen errors (see an example).
Q: How do I import settings from GPM, Godep, gom or gb?
There are two parts to importing.
- If a package you import has configuration for GPM, Godep, gom or gb Glide will recursively install the dependencies automatically.
- If you would like to import configuration from GPM, Godep, gom or gb to Glide see the
glide import
command. For example, you can runglide import godep
for Glide to detect the projects Godep configuration and generate aglide.yaml
file for you.
Each of these will merge your existing
glide.yaml
file with the dependencies it finds for those managers, and then emit the file as output. It will not overwrite your glide.yaml file.You can write it to file like this:
$ glide import godep -f glide.yaml
Q: Can Glide fetch a package based on OS or Arch?
A: Yes. Using the
os
and arch
fields on a package
, you can specify which OSes and architectures the package should be fetched for. For example, the following package will only be fetched for 64-bit Darwin/OSX systems:- package: some/package
os:
- darwin
arch:
- amd64
The package will not be fetched for other architectures or OS.
Thanks!
We owe a huge debt of gratitude to the GPM and GVP projects, which inspired many of the features of this package. If
glide
isn't the right Go project manager for you, check out those.The Composer (PHP), npm (JavaScript), and Bundler (Ruby) projects all inspired various aspects of this tool, as well.
↧
又一个可以在其外面套上一层socks proxy的dns代理程序:dnsforwarder-by-regret1537
在mac机器上。
git clone https://github.com/regret1537/dnsforwarder dnsforwarder-by-regret1537
cd dnsforwarder-by-regret1537
./configure
make
(会在当前目录下,生成可执行文件dnsforwarder)
nano default-en.config
其内容如下:
LogOn false
LogFileThresholdLength 102400
LogFileFolder
LocalInterface 127.0.0.1
LocalPort 53
OpenLocalTCP true
PrimaryServer TCP
TCPServer 8.8.4.4,8.8.8.8
TCPProxy 127.0.0.1:1080
UDPServer 208.67.220.220
UDPFilter true
UDPBlock_IP 243.185.187.39,46.82.174.68,37.61.54.158,93.46.8.89,59.24.3.173,203.98.7.65,8.7.198.45,78.16.49.15,159.106.121.75
IPSubstituting
ExcludedDomain
ExcludedList
AlwaysTCP
Hosts
HostsUpdateInterval 18000
HostsDownloadPath
HostsScript
HostsRetryInterval 30
AppendHosts
DisableIpv6WhenIpv4Exists false
UseCache false
CacheSize 1048576
MemoryCache true
CacheFile
IgnoreTTL false
OverrideTTL -1
MultipleTTL 1
ReloadCache false
OverwriteCache false
DisabledType
DisabledDomain
DisabledList
RefusingResponseCode 0
DomainStatistic false
DomainStatisticTempletFile
StatisticUpdateInterval 29
然后运行:
sudo ./dnsforwarder -f default-en.config
不要关闭此terminal窗口。
看见配置文件里面的TCPProxy 127.0.0.1:1080了吗?这个dnsforwarder-by-regret1537其实是修改自https://github.com/holmium/dnsforwarder ,但是https://github.com/holmium/dnsforwarder/blob/6/default.config和https://github.com/holmium/dnsforwarder/blob/6/default.en.config里面均没有TCPProxy这一项。但是https://github.com/regret1537/dnsforwarder/blob/5/default.config里面有TCPProxy这一项。所以我们可以替dnsforwarder-by-regret1537套一层socks proxy,比如ss.
实际使用例子:
sudo wg-quick up wg0
sudo networksetup -setdnsservers "Wi-Fi" 127.0.0.1
cd ~/dnsforwarder-by-regret1537 && sudo ./dnsforwarder -f default-en.config
项目地址:https://github.com/regret1537/dnsforwarder
此文https://briteming.blogspot.com/2019/07/dns-querysocks.html又要添上一员了。
ps.其实https://github.com/holmium/dnsforwarder/blob/5/default.config里面有TCPProxy这一项,所以https://github.com/holmium/dnsforwarder的v5版也是支持TCPProxy这一项的。
git clone https://github.com/regret1537/dnsforwarder dnsforwarder-by-regret1537
cd dnsforwarder-by-regret1537
./configure
make
(会在当前目录下,生成可执行文件dnsforwarder)
nano default-en.config
其内容如下:
LogOn false
LogFileThresholdLength 102400
LogFileFolder
LocalInterface 127.0.0.1
LocalPort 53
OpenLocalTCP true
PrimaryServer TCP
TCPServer 8.8.4.4,8.8.8.8
TCPProxy 127.0.0.1:1080
UDPServer 208.67.220.220
UDPFilter true
UDPBlock_IP 243.185.187.39,46.82.174.68,37.61.54.158,93.46.8.89,59.24.3.173,203.98.7.65,8.7.198.45,78.16.49.15,159.106.121.75
IPSubstituting
ExcludedDomain
ExcludedList
AlwaysTCP
Hosts
HostsUpdateInterval 18000
HostsDownloadPath
HostsScript
HostsRetryInterval 30
AppendHosts
DisableIpv6WhenIpv4Exists false
UseCache false
CacheSize 1048576
MemoryCache true
CacheFile
IgnoreTTL false
OverrideTTL -1
MultipleTTL 1
ReloadCache false
OverwriteCache false
DisabledType
DisabledDomain
DisabledList
RefusingResponseCode 0
DomainStatistic false
DomainStatisticTempletFile
StatisticUpdateInterval 29
然后运行:
sudo ./dnsforwarder -f default-en.config
不要关闭此terminal窗口。
看见配置文件里面的TCPProxy 127.0.0.1:1080了吗?这个dnsforwarder-by-regret1537其实是修改自https://github.com/holmium/dnsforwarder ,但是https://github.com/holmium/dnsforwarder/blob/6/default.config和https://github.com/holmium/dnsforwarder/blob/6/default.en.config里面均没有TCPProxy这一项。但是https://github.com/regret1537/dnsforwarder/blob/5/default.config里面有TCPProxy这一项。所以我们可以替dnsforwarder-by-regret1537套一层socks proxy,比如ss.
实际使用例子:
sudo wg-quick up wg0
sudo networksetup -setdnsservers "Wi-Fi" 127.0.0.1
cd ~/dnsforwarder-by-regret1537 && sudo ./dnsforwarder -f default-en.config
项目地址:https://github.com/regret1537/dnsforwarder
此文https://briteming.blogspot.com/2019/07/dns-querysocks.html又要添上一员了。
ps.其实https://github.com/holmium/dnsforwarder/blob/5/default.config里面有TCPProxy这一项,所以https://github.com/holmium/dnsforwarder的v5版也是支持TCPProxy这一项的。
↧
↧
shadowsocks超详细科普教程
Docker + DigitalOcean + Shadowsocks 5分钟科学上网
Shadowsocks for OSX: https://github.com/shadowsocks/shadowsocks-iOS/wiki/Shadowsocks-for-OSX-%E5%B8%AE%E5%8A%A9
Shadowsocks clients: https://shadowsocks.com/client.html
choose docker 16.2 on 14.04
add ssh keys
安装 Shadowsocks:
docker pull oddrationale/docker-shadowsocks
docker run -d -p 1984:1984 oddrationale/docker-shadowsocks -s 0.0.0.0 -p 1984 -k paaassswwword -m aes-256-cfb
paaassswwword 就是等下配置客户端需要的密码
check
docker ps
客户端配置: ip, port, password, and aes-256-cfb
Shadowsocks的小白使用教程
http://51.ruyo.net/p/412.html
http://t.cn/Ry42Kbx
chrome浏览器配合代理扩展的设置,下拉记事本滑块到底,看附3 首先明确一点,不管 Shadowsocks 有几种版本,都分为服务端和客户端,服务端是部署在服务器(VPS)上的,客户端是在你的电脑上使用的。简单说一下windows系统,你有shadowsocks节点的情况下,Shadowsocks客户端的设置代理使用教程一定要有有效SS节点才行 一定要有有效SS节点才行网或群共享下载Windows系统的Shadowsocks客户端软件为绿色免安装,下载 解压到任意目录,如: D:/Program Files/shadowsocksshadowsocks的账号(本地客户端配置参数)一般包括这么几个部分
4-1 :服务器 IP (一般为域名或数字ip)
4-2: Port :服务器端口 (不同的账号的端口也都是不同的)
4-3 :Password:你的密码
4-4 :加密模式:鼠标点击下拉小三角选取
依次手动输入以下3项 shadowsocks 服务器域名或IP服务器端口密码并选择ss服务商提供的节点对应的加密方式点击“确定”右下角的 代理端口 指的是本地监听端口,一般保持默认1080就可以,不用你填。现在的ss站都提供二维码形式的ss节点配置参数文件对于二维码形式的ss节点配置文件,也可以用客户端自带的二维码扫描功能快速添加右键>任务栏>ss客户端图标>服务器>扫描屏幕二维码客户端支持添加多线路节点,方便你切换,选择相对你网络环境质量较好,速度快的节点。 shadowsocks节点速度快慢,影响shadowsocks节点速度的因素:你的机房(地理位置,影响节点路由),运营商(网络封锁程度、丢包率、延迟),时间段(高峰期),运营商QoS限速,你的本地物理宽带等等。总结起来就是一句话:无法预测。一般免费或付费shadowsocks站都会提供多个不同vps的节点供你选择切换。
桌面右下角 任务栏 右键ss图标 选择 启用系统代理。系统代理模式 根据自己需要选择pac或全局代理 ,一般建议pac
打开IE浏览器,访问https://www.youtube.com/
其他浏览器的shadowsocks代理设置参考上面的教程链接或下面的说明网上找了几个客户端的使用教程 供参考
http://www.awolau.com/shadowsocks/shadowsocks-win7-xp.html
http://cnwall.tk/useage-muti-plat-shadowsocks/
https://cnlic.com/?paged=2
如果使用Shadowsocks,请清除或还原以前修改过的hosts文件,也请务必关闭其他占用1080等端口的代理、翻墙软件
付费的shadowsocks节点
提供商鱼龙混杂,没个统一的流量和收费标准确需购买,建议多比较几家的节点和流量能提供试用当然最好,有月付,季付尽量不要选择年付。现在基本所有的shadowsocks站都提供收费服务以下链接是一部分提供收费服务的shadowsocks商家非广告,非推广,来源网络,仅供参考
shadowsocks各种版本及教程:
www.wegotofqss.info
www.wegotofqss.info
https://www.fyzhuji.com/shadow.html
https://www.start-ss.biz/
https://www.deepss.org/index.php
http://my.ssjsq.net/
http://playss.co/
http://www.qiushiss.com/cart.php
https://www.bluecloud.pw/
http://www.hishadowsocks.com/
https://my.ssh91.net/
http://www.pgfastss.org/order.php
http://my.ssh91.net/cart.php
http://www.pgfastss.com/index.php
http://blog.onlybird.com/%E6%94%B6%E8%B4%B9ssh%E4%BB%A3%E7%90%86
http://itti.xyz/
https://www.ezlink.hk/order
https://vnet.link/ 微林(中转)
*注意*:Shadowsocks.com不是shadowsocks官网,就是一个纯提供商业服务的网站,所售服务和其他shadowsocks商业站一样。
公开的shadowsocks线路极易遭到恶意流量消耗和DDoS攻击或恶意破解ssh 现在明码公开的免费线路,网上论坛和v2ex 还有G+ twitter几乎已经没有了,你可以试着自己搜一下 http://t.cn/RLTGXfn%E6%88%96http://t.cn/RLTGoxm
获取shadowsocks节点的几种方式
抢码获取免费流量 免费或免费+收费的shadowsocks站,现在注册码都由站长或管理员严格控制发放了。肉少狼多,现在抢码有难度
自己买vps搭建。 安全,流量独享。缺点;节点单一,速度如何没保证,靠人品值。
买现成的ss服务商提供的服务
缺点:一般都有流量限制。没有有效节点,想免费体验一把的只能自己想其他办法了。
http://www.hishadowsocks.com/ 4小时更新一次密码
http://www.ishadowsocks.com/ 6小时更新一次密码
http://www.surperoneblog.com/shadowsocks.php 6小时更新一次密码
http://sscat.cc/free/ 3小时更新一次密码
http://kf0.cc/ 4小时更新一次密码
https://www.ezlink.hk/free.php 密码每天0点更新
http://freehide.co.uk/free-shadowsocks/
https://namaho.com 半个月更换一次密码 不限速不限量不收费不负责
http://www.htovpn.net/?View=FreeSS 3小时更新一次密码 需要注册
http://sskuai.pw/
https://plus.google.com/communities/104092405342699579599 shadowsocks免费帐号
https://plus.google.com/communities/109962494203239446911
https://plus.google.com/+GhostAssassin/posts/NrDZWoXVjSD 免费shadowsocks大集合
http://www.fyhqy.com/356/
http://yyf.sg/code 免费shadowsocks邀请码集合站
QQ搜群 shadowsocks 有的shadowsocks qq群有免费ss线路或内部放邀请码
以上链接或链接中的免费shadowsocks随时可能失效,这个就没啥好解释的了。有问题,自己随时google解决。
1个shadowsocks讨论圈 https://plus.google.com/s/shadowsocks
提醒一下如非确实必要,尽量不要用shadowsocks全局可以通过软件自带pac或浏览器安装代理管理扩展,实现智能分流如何修改shadowsocks pac文件http://www.awolau.com/shadowsocks/start-pac.html
实现科学上网时,启用系统代理后,Shadowsocks客户端会自动配置一个IE代理,使用本地127.0.0.1:1080,默认会选择PAC模式。关于PAC,大家可以参考维基百科。选择PAC模式后,系统会根据PAC配置文件pac.txt(与Shadowsocks.exe同级目录),当你的浏览器访问这个配置文件里面配置的URL时,会使用代理,否则则不会使用代理。这样既节省ss流量,也会提高国内网站的访问速度,这个很不错。最后,如果大家发现有什么网站被Qiang了,可以在pac.txt这个文件里面添加这个网站URL,即可通过ss的代理来访问了。同时,最好也定期从GFWList更新PAC。
如何制作便携版shadowsocks
下载2.5.6版(clowwindy)shadowsocks(只有高于这版的才支持制作便携版)在 shadowsocks.exe 所在目录创建一个 shadowsocksportablemode.txt 文件退出程序,重启程序https://github.com/shadowsocks/shadowsocks-windows/releases
源码下架,可以自行寻找注:SSR版貌似不支持此项功能
shadowsocks俗称 纸飞机
ShadowSocks是Clowwindy开发的,一个轻量级的几乎跨平台的开源翻墙应用。 Shadowsocks 是一个安全的socks5代理,由于服务端与终端都简便易用,目前配合VPS主机后十分稳定,已慢慢取代GAE等成为主流代理工具。
Shadowsocks功能特性:
高性能:基于异步 I/O,事件驱动的程序实现;专为大并发、大流量的应用场景优化;无需保持连接状态,适用于移动设备及无线网络。
低资源占用:完全以原生代码实现,后台服务内存占用不超过10MB。
跨平台:可以在PC、MAC、智能手机(iPhone与Android)、甚至路由器(OpenWRT)中运行。
安全:支持多种加密方案及多种加密强度,提供系统级别的网络数据加密。
开源:由社区维护的开源项目,包括GPL及MIT两种协议的多种实现。
有必要先说明一下,用shadowsocks科学上网不是"免费"的。 shadowsocks软件是免费的,但必须要有架设好的服务器线路才能实现无障碍的“科学上网”。架设shadowsocks需要自己购买vps,在服务器端搭建,或买别人搭建好出售流量的线路。网上有免费分享的shadowsocks线路,这种是可以免费使用的。
shadowsocks官方信息
http://shadowsocks.org/en/download/clients.html
shadowsocks官网
http://shadowsocks.org/en/index.html
shadowsocks作者
https://www.v2ex.com/member/clowwindy
shadowsocks官方 pac
https://github.com/clowwindy/gfwlist2pac
shadowsocks官方的2种pac模式(无法更新了) fast mode pac
https://raw.githubusercontent.com/clowwindy/gfwlist2pac/master/test/proxy.pac
precise mode pac
https://raw.githubusercontent.com/clowwindy/gfwlist2pac/master/test/proxy_abp.pac 一个shadowsocks可用的可更新的pac
https://raw.githubusercontent.com/KyonLi/ss-pac/master/ss.pac
shadowsocks客户端官网下载页面
http://shadowsocks.org/en/download/clients.html
Windows系统shadowsocks旧版及MAC电脑客户端shadowsocks官方下载页面
http://sourceforge.net/projects/shadowsocksgui/files/dist/
github的下载链接(最新版)
https://github.com/shadowsocks/shadowsocks-windows/releases
低于2.5.2的旧版Shadowsocks-win-x.x.x.zip和Shadowsocks-win-dotnet4.0-x.x.x.zip的区别 For >= Windows 8 or with .Net 4.0, download Shadowsocks-win-dotnet4.0-x.x.x.zip. For <= Windows 7 or with .Net 2.0, download Shadowsocks-win-x.x.x.zip.
注意:
NET 2.0不能在Windows10良好运行,从2.5.2这个版本开始,我们不再支持.NET 2.0。最低要求 .Net 4.0 现在Shadowsocks-win-2.5.2.zip和Shadowsocks-win-dotnet4.0-2.5.2.zip是完全相同的文件。如果您使用的是Windows XP或7,请安装.NET 4.0或更高版本。负载均衡:就是多个连接分摊到各个服务器 随机选择服务器高可用:按最低延迟+最稳定的标准(丢包率)自动选择一个服务器进行连接累计丢包率:通过定时 ping 来测速和选择。如果要使用本功能,请打开菜单里的统计可用性
shadowsocks作者关于windows2.0客户端功能性的说明 http://www.chinagfw.org/2014/11/shadowsocks-for-windows-20.html
http://vc2tea.com/whats-shadowsocks/ 写给非专业人士看的 Shadowsocks 简介
https://blog.linuxeye.com/423.html Shadowsocks原理
安卓客户端-影梭的官网下载页面
https://play.google.com/store/apps/details?id=com.github.shadowsocks
https://github.com/shadowsocks/shadowsocks-android/releases
安卓未root,也可以使用shadowsocks
安卓版教程 http://51.ruyo.net/p/412.html 设置要点:路由-绕过局域网及中国大陆地址,全局代理-勾选“设置系统代理”。设置完成后,点击右上角的开关,即可开启Shadowsocks代理有特殊原因还在坚守fqrouter2的,可以添加自己的shadowsocks线路,添加后 fqrouter可满血复活
shadowsockR
shadowsocks-rss版下载链接
shadowsockR就是第三方shadowsocks编译版(群共享的神奇海螺版shadowsocks-SSR)
shadowsockR官方链接:+ https://github.com/breakwa11/shadowsocks-rss
ShadowsocksR 服务端安装教程
https://github.com/breakwa11/shadowsocks-rss/wiki/Server-Setup
https://plus.google.com/u/0/+MikotoMisakamm
https://plus.google.com/u/0/118234153777431449917/posts 使用第三方shadowsocks编译版前,请务必仔细阅读shadowsockR主页的参数解释和说明
路由器端shadowsocks教程
https://cokebar.info/
https://php-rmcr7.rhcloud.com/openwrt-fq/
http://hong.im/2014/03/16/configure-an-openwrt-based-router-to-use-shadowsocks-and-redirect-foreign-traffic/
具体哪些型号的路由器支持shadowsocks? 想自己动手的,淘宝搜 openWRT,QQ搜 群openWRT
iOS端 shadowsocks客户端教程
iOS使用shadowsocks的前提条件是必须越狱!越狱!越狱!
http://www.pgssh.com/ios-shadowsocks.html
未越狱的话,ss客户端仅相当于一个内置浏览器,无法代理其他应用。直接在appstore搜索 Shadowsocks,下载地址:
http://itunes.apple.com/us/app/shadowsocks/id665729974?ls=1&mt=8
iOS 越狱了的话,可以代理其他应用端。越狱的直接在 Cydia 里搜索 Shadowsocks ,然后安装。
http://jas0n.me/2014/11/12/up_14_11_12/
未越狱的iOS端建议使用anyconnectvpn或最近的神器Surge
http://www.cellsystech.com/docs/%E5%85%8D%E8%B4%B9%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%BF%A1%E6%81%AF%E5%8F%8A%E5%8D%8F%E8%AE%AE/
关于Surge 已经提交apple,在AppStore上架
http://t.co/TF1WvOgq1c Surge AppStore 购买前说明。
购买直达链接:
http://itunes.apple.com/cn/app/surge-web-developer-tool-proxy/id1040100637?ls=1&mt=8
Surge 新手使用指南
http://medium.com/@scomper/surge-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6-a1533c10e80b
如何配置surge在ios中使用shadowsocks科学上网
http://ideafoc.us/2015/10/%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AEsurge%E5%9C%A8ios%E4%B8%AD%E4%BD%BF%E7%94%A8shadowsocks%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91/
http://surge.run/
http://gist.github.com/soffchen/05bc0f017a10486eb646
http://twitter.com/Blankwonder
http://plus.google.com/+LeoLiu/posts/GPvHQ7uj2iv
http://www.pgyer.com/b7c37752060a55ceeae89159d6cedd52
Surge可以去twitter上找作者要测试版需要 OS X 10.10 / iOS 9.0 以上版本
shadowsocks客户端参数简单说明
"server", 服务器名称 一般填写域名或ip
"server_port", 服务端监听端口 填写ss提供者给你的服务器端口
"local_address", 本地中转地址 通常为 127.0.0.1
"password", 接入服务端密码
"method", 加密方式 通常为 aes-256-cfb或rc4-md5
"local_port", 本地监听端口, 默认为 1080 ,本地端口一般保持默认即可
"timeout", 以秒为单位的连接超时时长
说明:ss://开头的地址是base64加密方式提供的shadowsocks线路,解密方法:复制ss:// 后面的字符串,解密后,就可以得到格式为method:password@IP:Port的服务器地址。一个base64解密网站 http://tool.chinaz.com/Tools/Base64.aspx?jdfwkey=cvvmy
注意:
切记遵守vps所在国法律,勿做违法或法律禁止事宜。
千万不要挂shadowsocks使用p2p BT下载。
因为美国的vps需要遵从美国的DMCA版权法律,如果该vps被用于bt下载,
使用的vps的ip就会被记录下来。VPS商家就会封号,vps就会被停止服务。
如果不想失去这个翻墙手段,最好不要翻墙的时候用p2p。
自己部署shadowsocks服务器端的教程
以下为vps端自己部署shadowsocks服务器端的教程,不是自己部署的就略过大流量或重度用户建议自己搭建或购买适合自己流量,价位的shadowsocks服务对个人隐私和安全性比较重视的,就自己部署shadowsocks服务器端吧网上搭建和优化教程很多,自己动手搜一下。以下几个链接供参考官网教程
https://github.com/shadowsocks/shadowsocks/wiki
网上搜集的一部分教程 打不开的链接挂代理访问
http://vbird.dic.ksu.edu.tw/
http://shadowsocks.blogspot.com/2015/01/shadowsocks.html
http://www.dothinking.cn/ruan-jian-jing-pin-wu/shadowsocks-vps.html
https://plus.google.com/103234343779069345365/posts/Xce4EJpLGhX
http://shadowsocks.blogspot.com/2015/01/shadowsocks.html
http://ju.outofmemory.cn/entry/114637
http://www.abclite.org/602
http://teddysun.com/399.html
https://php-rmcr7.rhcloud.com/shadowsocks-server/
http://www.fanyue.info/2015/02/shadowsocks.html 搬瓦工一键shadowsocks教程
http://jannerchang.tumblr.com/post/114392917710/4-23
http://www.cmsky.com/shadowsocks-manyuser-udp/ Shadowsocks-Manyuser开启UDP支持
http://www.cmsky.com/serverspeeder-install/ 安装锐速为网络加速
https://blog.linuxeye.com/423.html Shadowsocks一键安装脚本
https://blog.linuxeye.com/426.html ShadowSocks多用户管理系统搭建(moeSS+manyuser)
http://cnwall.tk/bandwagonhost-one-key-install-shadowsocks/
http://www.tennfy.com/3334.html
http://www.tennfy.com/2022.html
http://capbone.com/shadowsocks/
http://www.tennfy.com/2843.html
http://www.tennfy.com/2148.html
iOS端搭建anyconnect教程
https://plus.google.com/+McGhostGao/posts/Z4gJrZsiRyp
http://lifehacker.io/post/108708838206/cisco-anyconnect-shadowsocks
http://ifreedomlife.com/2015/04/20/Setup-Cisco-AnyConnect-VPN-on-CentOS7/
http://jannerchang.tumblr.com/post/108814743720/centos7-strongswan-ios-vpn
http://goo.gl/WRW8ns
http://www.cmsky.com/anyconnect/
关于VPS(虚拟专用服务器)的基础知识
http://cnwall.tk/about-vps/
https://www.v2ex.com/go/vps
http://cnwall.tk/about-vps-ssh-client/
http://www.vpser.net/vps-howto
http://since1989.org/digitalocean/vps-vpn-shadowsocks.html
https://www.appfordev.com/68.html
几个vps测评网站(排名不分先后):
LEB: http://lowendbox.com/
老左博客: http://www.laozuo.org/vps
主机测评: http://www.zhujiceping.com/
freehao123: http://www.freehao123.com/category/vps-zhuji/
年付vps: http://www.yrvps.com/
赵荣部落: http://www.zrblog.net/?
VPS推荐网 http://vpsadd.com/
主机博士 http://www.drpsafe.com/
小夜博客 http://www.vpsmm.com/
v2ex https://www.v2ex.com/go/vps
以后翻墙的方向,重点就是去中心化
fqrouter2作者:
为何有fqrouter?因为当年GFW还是一个入侵检测系统,不是一个防火墙。这就意味着可以利用很多入侵检测系统的漏洞来做无代理的翻墙,这是很有意思的事情。
为何关闭fqrouter?
因为今年GFW已经正式升级为一道防火墙了,google的成千上万个ip被封。这种行为相当于把部分国际互联网进行了物理层面的拔网线。今后的翻墙只有资源的比拼了,对于这种索然无味的事情我就不在这个上面浪费生命了。那我怎么翻墙?(文字作者)找渠道买shadowsocks帐号。这种零散的基于交易的行为是去中心化的,长期的,有生命力的。
shadowsocks 作者clowwindy:
从实际情况上来看,Shadowsocks 没有办法离开去中心化的服务器。要么自己花钱买 VPS,要么用有人分享的账号,要么用有人提供的付费服务,他们各有所长,适合不同的人。
http://www.solidot.org/story?sid=45231
ShadowsocksBackup
https://github.com/Long-live-shadowsocks
https://github.com/ShadowsocksBackup
Shadowsocks Windows 官方使用说明
功能
系统代理设置
PAC 模式和全局模式
GFWList 和用户规则
支持 HTTP 代理
支持多服务器切换
支持 UDP 代理
下载
下载 最新版 https://github.com/shadowsocks/shadowsocks-windows/releases。
基本使用在任务栏找到 Shadowsocks 图标在 服务器 菜单添加多个服务器选择 启用系统代理 来启用系统代理。请禁用浏览器里的代理插件,或把它们设置为使用系统代理。除了设为系统代理,你也可以直接自己配置浏览器代理。在 SwitchyOmega 中把代理设置为 SOCKS5 或 HTTP 的 127.0.0.1:1080。这个 1080 端口可以在服务器设置中设置。
PAC
可以编辑 PAC 文件来修改 PAC 设置。Shadowsocks 会监听文件变化,修改后会自动生效。你也可以从 GFWList (由第三方维护)更新 PAC 文件。你也可以使用在线 PAC URL 服务器自动切换负载均衡:随机选择服务器高可用:根据延迟和丢包率自动选择服务器累计丢包率:通过定时 ping 来测速和选择。如果要使用本功能,请打开菜单里的统计可用性。也可以实现 IStrategy 接口来自定义切换规则,然后给我们发一个 pull request。
UDP
对于 UDP,请使用 SocksCap 或 ProxyCap 强制你想使用的程序走代理。
多实例
如果想使用其它工具如 SwitchyOmega 管理多个服务器,可以启动多个 Shadowsocks。 为了避免配置产生冲突,把 Shadowsocks 复制到一个新目录里,并给它设置一个新的本地端口。另外在 SwitchyOmega 中需要使用 SOCKS5 代理,因为 HTTP 代理还是只会启动一个。
服务器配置
请访问 服务器 https://github.com/shadowsocks/shadowsocks/wiki/Ports-and-Clients#linux--server-side 获取更多信息。
绿色模式
如果你想把所有临时文件放在 shadowsocks/temp 目录而不是系统的 temp 目录, 可以在shadowsocks 所在目录创建一个 shadowsocksportablemode.txt 文件。
开发
Visual Studio 2015 is required. 授权 GPLv3
附1 shadowsocks如何实现类VPN代理:
Shadowsocks(Sock5代理)的PAC模式与全局模式与VPN的区别 http://t.cn/Ry4wJ6x
使用Proxifier把shadowsocks代理转为全局代理(类VPN) http://t.cn/Ry42ih9
Proxifier下载 Proxifier 3.28 吕达嵘汉化注册版(安装即为注册版) http://www.hanzify.org/software/13717.html
Proxifier v3.28 破解版 Initex.Software.Proxifier.v3.28.Standard.Edition.Incl.Keymaker-ZWT http://www89.zippyshare.com/v/5iEwpCKM/file.htmlInitex.Software.Proxifier.v3.28.Portable.Edition.Incl.Keymaker-ZWT
http://www12.zippyshare.com/v/BqNsbIiu/file.html
本站系列教程: https://gochrome.info/tag/proxifier-series/
附2 shadowsocks如何代理本地游戏客户端或其他软件客户端:
shadowsocks如何代理本地游戏客户端或其他软件客户端
关于代理UDP(以TCP转发或UDP转发均可)官方shadowsocks和第三方客户端shadowsocksR最新版,都支持配合使用SocksCap64/SocksCap/ProxyCap等工具,把需要TCP和UDP代理的程序通过本版本程序转发。即不需要折腾OpenWrt或路由器即可在PC上获得UDP转发的能力,是游戏玩家的福音如果你是个人用户,可自行更新服务端或向你的ss站长提议更新后端。如果你是站长,可从https://github.com/breakwa11/shadowsocks/tree/manyuser 获取最新的多用户分支代码,与原版本兼容。
需要第三方软件SocksCap64/SocksCap/ProxyCap
需要有支持udp转发的shadowsocks节点
SocksCap64教程(SocksCap/ProxyCap使用方法大同小异) http://www.cmsky.com/sockscap64-shadowsocks/
SocksCap64免费 http://www.sockscap64.com/
Sockscap 免费 http://www.socksproxychecker.com/sockscap.html
Sockscap汉化版 http://www.hanzify.org/software/8898.html
Proxycap http://www.proxycap.com/download.html
破解
x86 http://www43.zippyshare.com/v/39892822/file.html
x64 http://www74.zippyshare.com/v/12710611/file.html
注意:Proxifier 不支持处理 UDP 流量,Proxifier是靠实现类vpn方式实现第三方应用代理
附3 chrome浏览器SwitchyOmega扩展如何添加shadowsocks的代理设置:
chrome浏览器SwitchyOmega扩展如何添加shadowsocks的代理设置?
添加shadowsocks的浏览器全局模式
右键SwitchyOmega扩展图标
选项>>
新建情景模式>>
名称:shadowsocks 全局(名称随便填)>>
类型:选择:代理服务器>>
点击:创建>>
代理协议:一定选择SOCKS5 ,代理服务器 填写127.0.0.1 ,代理端口填写
1080
添加shadowsocks的浏览器pac模式
新建情景模式>>
名称:shadowsocks pac(名称随便填)>>
类型:选择:pac情景模式>>
点击:创建>>
pac网址>>复制下面这个链接到pac网址一栏
https://raw.githubusercontent.com/KyonLi/ss-pac/master/ss.pac
点击:立即更新情景模式
shadowsocks官方有2种pac模式,用哪个或都添加这个随你便
fast mode pac(快速)和precise mode pac(精确)
3.添加shadowsocks的"自动切换"代理模式, +beginsrc html 有个步骤用纯文字表诉的话,略微有点困难,这里掠过。需要的自己导入OmegaOptions.bak 群共享和网盘的OmegaOptions.bak (文件大小243KB那个) 包括shadowsocks"自动切换""shadowsockspac"和"shadowsocks全局" 3种情景模式,导入即可 #+endsrc
SwitchyOmega 商店下载链接 https://chrome.google.com/webstore/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif
SwitchyOmega官方备用下载地址 https://github.com/FelisCatus/SwitchyOmega/releases
附:原gfwlist项目迁移到 https://github.com/gfwlist/gfwlist https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt
本站原创switchyomega配置文件
switchyomega自动切换版:https://gochrome.info/switchyomega-config/
switchyomega虚拟情景版:https://gochrome.info/switchyomega-virtual/
站长推荐使用虚拟情景模式(共内置了8套模式)
火狐浏览器添加规则和chrome大同小异
Google 即将关闭 Google Code,原gfwlist项目主页
https://code.google.com/p/autoproxy-gfwlist/
附4 全球付Globalcash虚拟信用卡和paypal申请教程:
全球付Globalcash虚拟信用卡和paypal注册申请教程
http://www.cmsky.com/globalcash/
http://jingyan.baidu.com/article/e73e26c0e3913b24adb6a7a4.html
附5 什么是cn2?:
中国电信下一代承载网络(国际流量走的cn2线路) http://www.chinatelecom.com.cn/gjywpd/gj-qqwl/ https://www.netroby.com/view.php?id=3459http://baike.baidu.com/subview/2193652/2193652.htm http://cablemap.info/ Greg's Cable Map
CN2网络延迟和丢包监控: http://183.91.49.53/public/sla/slaPerformanceNew.html
如果你连不上服务器,请首先检查SS客户端配置是否正确:服务器域名或ip ,服务器端口 ,密码 ,加密方式,检查上面四项,确认没有填错。如果均正常,依然连不上的话,请尝试Ping下 服务器域名或ip,看是否通;如果不通,一般是你的线路问题(电信、联通、地域、时间等相关,有可能是暂时性问题)。但注意在少数情况下,不管你是否能Ping通,都跟是否能连上ss服务器无关。最后说下,一般都不会是服务器的问题,也就是说最大的可能性是:1.客户端参数配置,2.浏览器代理设置。
Shadowsocks 为什么出现 500 Internal Privoxy Error 可能原因:
客户端的服务器信息错误
服务端未正常启动或线路问题(被墙?)
如果有使用端口转发,有可能是转发线路问题
通俗点说
客户端配置参数填错,或参数有变化,自己更新不及时
服务器端挂了,或线路被墙 (可能性很小)
使用端口转发的,联系你的服务商
可能有人会有觉得100多人同时在用一个服务器会非常慢,但实际上这点用户数对服务器造成的压力并没你想像中的大。根据过去的服务器监控数据来看,平时的带宽使用平均在12Mbps左右,间中会有去到20Mbps的突发流量,可以说完全没有压力。 CPU使用率长期在10%以下。内存方面没做太多优化,保持在60%左右。或者100人同时在看视频的话,带宽可能就真的有压力,但这种概率几乎不存在,而且就算你家有100Mbps的宽带,服务器也有100Mbps的带宽,你也会受中间线路最小带宽路段的限制,想像下木桶短板原理,而且“网络”中还有很多你意想不到的情况和条件存在,所以用(总带宽/使用人数来)算每人得到的带宽这种方法实在不合理。
↧
台灣誌 新康橫斷 風雨烈日行 月襲 嘉明湖避難山屋
↧
年代向錢看 習近平、川普貿易戰豪賭! 中國經濟隨時炸鍋
↧
在mac上,用vpn翻墙时需要注意的一个问题
本博客谈到多次,在mac上,用vpn翻墙时,可能会遇到dns污染。于是在此文https://briteming.blogspot.com/2019/07/dns-querysocks.html中总结了5款dns proxy程序来应对dns污染。不过有时在用vpn翻墙时,突然翻墙失败,原来是mac系统的dns server地址又莫名其妙的变回了isp的dns server地址,这样当然会翻墙失败。解决办法就是运行命令:
sudo networksetup -setdnsservers "Wi-Fi" 127.0.0.1 重新修改mac系统的dns server地址为127.0.0.1即可。
sudo networksetup -setdnsservers "Wi-Fi" 127.0.0.1 重新修改mac系统的dns server地址为127.0.0.1即可。
↧
↧
港台老派文人那里,有传统中国人的样子
01
19年前,也就是2000年,李安的电影《卧虎藏龙》上映。
在第73届奥斯卡颁奖典礼上,《卧虎藏龙》获得包括最佳外语片、最佳艺术指导、最佳摄影、最佳原创配乐四大奖项,成为历史上第一部获奥斯卡奖的华语电影。
这部电影古韵悠长,让全球看到了过去中国人的样子。 在李安构思下,我们再次看到了昔日中国人身上那种飘逸,精致,侠气和内心原则。
李安曾说:
我一辈子都是外人,在台湾是外省人,到美国是外国人,回大陆做台胞,反而在电影的想象世界里,觅得安身之地。
后来的十年里,大陆这边,张艺谋拍了《英雄》、《十面埋伏》,冯小刚拍了《夜宴》,陈凯歌拍了《无极》,姜文拍了《让子弹飞》。他们拍的都是过去的中国人,都拍走样了。
电影里的人尽管穿着古装、长衫,用过去的长剑、酒杯,男人骑着骏马、女人涂胭脂,但他们的脸上,眼神里,完全看不到过去中国人的精气神。
大陆的导演拍不出中国人的样子,反倒是李安这样常年寄居在海外的华人,拍出了那个由竹林,湖水,内心节制构成的中国。
过去的中国,经历了几十年的文化断层,八十年代全民知识重构,过去中国人的样子分崩离析。 而那些漂泊海外的华人,阴差阳错地躲过了文化断层的冲击,意外续上中国人的文脉。
十几年前,中国开始探讨,究竟什么是中国人的样子?
最后人们发现,过去中国人的样子,就像《卧虎藏龙》里的李慕白、俞秀莲:
温良恭俭,重道义,知廉耻,既有野蛮生长的活力,又有学养护身的雅致。
《卧虎藏龙》俞秀莲、李慕白
02
中国人自古有武侠情怀,迷的不是里头的打打杀杀,而是中国人有分寸,有神采,有气象的样子。 但从六十年代开始,由于历史原因,人们对过去中国人样子的向往,只能去海外华人身上找。
过去三十多年里,中国文人无比迷恋西来的文化,古希腊的苏格拉底,拉美的马尔克斯,德国的尼采,奥地利的弗洛伊德,美国的福克纳、海明威,法国的加缪、卢梭。而自汉唐至明清,自司马迁到张岱、蒲松龄、曹雪芹他们骨子所流淌的传统,被忽略和遗忘。
在当代的文人里,典型代表的70后许知远。他毕业于北大,二十郎当岁就出了第一本书,成为作家。接下来他又开书店,做记者,给中国最有名的报纸当主笔,到四十多岁又因做节目红遍全国。
许知远
同代的读书人里,他算是最体面,最有文化修养的。无论是国内外文学经典,还是经济、政治、历史等综合领域,都能侃侃而谈。
这些年,他写了一系列知识分子的书,《那些忧伤的年轻人》《时代的稻草人》《中国纪事》《我要成为世界的一部分》《这一代人的中国意识》等,永远以精英的视角,对这个社会保持批评和质疑。
像许知远这样,可以出书,可以做生意,可以获得赞美,获得社会地位的,在当代文人里已经算是“成功”。但在06年,他到香港见到蔡澜,第一印象:
跟蔡先生比,我突然觉得自己像个野蛮人。
两人相见的那天,七十多岁的蔡澜,穿着一袭料子很好看的黑衣,拄着一支精美的拐杖,银白的头发梳得一丝不乱。见到许知远,微笑、寒暄、握手,处处都有着过去中国人的待人接物,有分寸感,有克制的热情。和蔡澜接触后,许知远感慨道:
我们对过去人身上那种,典雅的东西,有分寸的东西,都已经被破坏的一干二净。
蔡澜
03
蔡澜祖籍潮汕,家学有古典国学底子。少年出国留学,后定居香港,躲过了大陆文化的剧烈迭代,所以骨子里还带着传统中国人的精气神。
在他的身上,依稀能看到自明清散人李渔、袁枚、沈复一脉下来的一代老中国人贵气温婉,有骨气的样子。
这样的例子,远不止蔡澜,名单还可列很长。比如台湾的文人柏杨、张大春、白先勇,以及导演杨德昌、侯孝贤。
杨德昌祖籍广东梅县,1岁时就迁居台湾,70年代赴美留学,回台湾后把身家性命都搭到了电影里。他一辈子不知道如何说软话、说假话,哪怕是对朋友也如此。
他有两块黑板,一块挂在房间,用来梳理电影结构。 一块挂在心里,给身边人的行为举止打分: 长脸的事加一分,丢脸的事扣一分。 谁的分扣完了,就和谁绝交,绝不啰嗦。
侯孝贤也是梅县人,毕业后当计算机推销员,最后师从台湾导演李行搞电影,也是著名的刚烈脾气,眼里揉不进沙子。
一次他拍完戏,深夜坐出租车回家。结果在车上和跟他年纪相仿的司机聊起政治,两个人话不投机激烈争辩,最后居然把车停在路边厮打起来。然后,俩人整了整衣服上车,继续往前开。
九十年代的台湾,构成一种奇特的性格,精英意识、怀旧,特别严肃、认真、纯粹。我们现在的电影,大家都崇拜美国的好莱坞商业片、欧洲的文艺片,但是在九十年代,世界最重要的两个电影潮流,却是伊朗和台湾电影。
台湾电影之所以在九十年代能出一系列的好作品,就因为那个时代有像杨德昌、侯孝贤这样的导演,身上有那么一股子骨气。他们不想被人看不起,不去计较个人荣辱得失,脚踏实地,用自己的专长为社会做事情,始终都是一个样子。
现在,这样老一代中国人的骨气,隔几代就荡然无存了。
放眼望去,今天所有的文娱圈子,都从复杂变得简单,简单到只剩下名和利。 整个社会也充满了精致的利己主义者,老师失去骨气,学生学会见风使舵,从商业领袖到各式文人,从政府官员到贩夫走卒,人们盲目追着欲望,而社会傲慢情绪无处不在。
侯孝贤
04
我们过去普遍喜欢港台文化,说到底,因为里头有过去中国人的衣食住行。
在港片《无间道》里,有台词说: 站住别动,我是差人!
“差人”这个词属于古语,在港片里,香港的警察介绍自己,还会说“我是当差的”,这都是清朝的语言习惯。在管制文书里,语言如文言凝练,用语里不见“的”,以示庄重。律文中有时尚可见到“尔等居民”的用语,充满古意。
香港的饭馆茶楼,大红大绿,大金大银,语声喧哗,就像唐诗里世俗的热闹,铺张而有元气。陈丹青有次到香港茶楼喝茶,进门走来一位男士,前台问:您几位?
那男士伸出三根手指,道: 仅三位而已。
在中国过去一百多年的历史中,香港还保留着过去中国人的风俗。连喝茶的百姓,日常口语还保留了过去的样子。
八九十年代的香港,流行文化一直保留中国的古意。 过去的中文偏紧致、清朗,所以港台用中文写的词中,很少有“的”字。 “的”来“的”去,就失了中文的语体韵味。
在香港,凡有人处,皆能唱“黄歌”,黄歌指黄霑写的歌。黄霑出生广东顺德,小时候养番狗、住洋楼,后随父避难香港,大学期间师从国学大师饶宗颐。
黄霑写歌词,灵感是来自古书《乐志》和唐诗宋词,他写的歌词《男儿当自强》《沧海一声笑》《上海滩》里,连一个“的”都找不到,字字都是过去中文的节制之美。
同时代的港台音乐,哪怕是甜美的邓丽君,唱的词也是“今宵别离后,何日君再来”。哪怕是知性的梅艳芳,唱的词也是“爱过知情重,醉过知酒浓”。哪怕是朴实的李宗盛,唱的词也是 “莫笑我是多情种,莫以成败论英雄”。
这些歌词,无不有着中国过去的古意之美,也有传统文人对汉字的羞耻感,择境炼字,用错一个字一个词,都会感觉很丢脸。
黄霑
05
在港台文人的身上,常常还能看到过去中国人待人接物,身上那种对他人的敏感,对他们的考虑,对他人的照顾和周全。
六十年代,金庸自办《明报》,连载《神雕侠侣》、《倚天屠龙记》等,大获成功。火到什么程度?小说紧要关头,国外报馆为抢先刊登,直接用地下电台拍电报传内容。
金庸出身浙江名门,祖上是进士、翰林,家学渊博,所以哪怕经商,骨子里流淌的也是过去的文人气。
他这么一个报业大佬,绝不当面训人,言谈点到为止,绝不赘述。甚至一直以纸条治报,凡事都写纸条给下属。有一次,一个员工在报纸上用了“若果”二字。第二天,收到金庸传来的纸条:本报不要用“若果”,这是广东方言,不是正统的普通中文。
台湾的林清玄,在全职写作前,曾在报社当记者。那时他追热点,写一个小偷的事件。文章末尾,他感慨道: 像心思如此细密,手法如此灵巧的小偷,做任何一件事情都会有成就的吧!
写完也没多想,直到很多年以后,林清玄去一家羊肉馆吃饭,老板拿出一张20年前的旧报纸,指着林清玄的文章说: 你还记得我吗? 我就是那个小偷,是你的这段话引导我走上正路。
这些,都是过去中国人的样子。 商人有商人的风度,文人有文人的悲悯心,就连小偷也有小偷的羞耻感。 士农工商,贩夫走卒,三教九流,各有各的道,各有各的样。
06
从前的中国人,喜欢称自己是“江湖儿女”。只因这四个字里,有过去中国人有情有义的样子。
最像江湖儿女的人,是港台的老文人、导演。他们的名字,今天听起来甚至有些陌生,但有情有义的样子,却令人无比熟悉。
六十年代,张彻是香港最有名望的导演。他出生杭州,其父是浙系军阀,曾在国民政府从政,与蒋经国交好。六七年,执导《独臂刀》,为邵氏创下票房破百万纪录,由此,人送外号“张百万”。他年轻时风光无限,但在晚年却落得凄凉收场,人气不再,写了一百多部剧本,也无人问津。
2002年,张彻因病去世,他一生没有子女,葬礼由众弟子帮忙操办。其中一个弟子叫姜大卫,70年代的著名影星,长得玉树临风,带着师兄弟们向张彻的遗像叩首。
在葬礼的筹备采访里,姜大卫还不忘给张彻拉投资人,抱着那摞剧本,见人就说:有意投拍者,请联系。
另一位和张彻齐名的导演胡金铨,是老北平人,家族属汉八旗的蓝旗,是翰林。他七一年执导电影《侠女》,在第28届戛纳电影节获最高综合技术奖,把整个华语电影拉高一个档次。但到了90年代,他的作品不再符合市场,票房惨淡,无人买账。
当时他的同行吴宇森,已经拍出《英雄本色》,叫好叫座。吴宇森为人仗义,看到胡金铨筹拍新片预算不够,立马解囊相助。但就在新片开拍前夕,胡金铨突然病逝。他君子一生,死前无存款,连自己生前期望下葬的墓地,也没着落。
吴宇森得知,就捐出一部分自己的墓地,为胡金铨办了体面的丧事。 要知道,香港的墓地寸土寸金,能为别人捐自己的墓地,哪怕是亲兄弟都未必肯。 如此待人,全靠有情有义。
吴宇森
07
在台湾,六十年代的文人,古龙写畅销武侠,最为名利双收。古龙是混黑社会出身,后来靠着写武侠小说,过上了上流生活,宝马香车、美女如云,掀开加长林肯后盖,码着满满的XO。
然而在当时,还有300多个没成名的穷文人,还在靠着写武侠小说,赚一点稿费艰难为生。
古龙大火后,很多开始冒古龙的名,卖盗版书来卖钱。有一天,好友林清玄拿着一本盗版书,来找古龙说:我知道这个冒你名的同行是谁,我们去举报他!
古龙就说了句: 这人我早就知道是谁,而且我也知道他全靠着这个养家糊口,我们举报他,他一家人就得挨饿,不要这么干。
古龙有朋友叫于东楼,专门给人当枪手糊口,几乎帮所有名家代过笔。后来于东楼写了一部《枪手·手枪》,古龙为了让他多赚点稿费,就主动说:你就署我的名吧,能多卖点。
今天的人,是把利益看得比情义重。而过去的人,是把情义看得比利益重。
六十年的香港,最红的女星是林黛。她出身名门,父亲是李宗仁秘书长程思远。连张大千都曾被她美貌打动,专门画一幅“林黛小姐造像”送上。邵逸夫为请林黛到拍电影,开出竞争对手两倍的片酬。61年,林黛以一部《千娇百媚》,歌舞双绝,令全港为之疯狂。
林黛
让人惋惜的是,1964年7月,年仅30岁的林黛,因变故吃药自杀,香消玉殒。 她下葬的那天,全香港的人去送,造成万人空巷,交通瘫痪了5小时,警局出动了400多名警察维持秩序。
2003年的4月,张国荣去世,他的葬礼上,徐克、张学友、梁家辉、林夕前去扶灵,上百位大牌明星前来送行,香港市民送出纸鹤多达195万多只,在非典泛滥的情况下,仍有四万名香港群众参加葬礼。
明星和香港民众,都有中国人的样子,相互掏心掏肺地敬重,既有了情,也有了义。 义薄了云天,云天也因情义而感动。
林黛去世送葬长队
08
100年前,国学大师辜鸿铭一言以蔽之,他曾形容中国人: 温和平静,稳重节制,从容练达。
三个成语说尽古往今来的中国人样子,温和来自儒家教养,平静来自道家修为,稳重用于入世,节制多为体面的羞耻感,从容是逍遥于江湖的自由人,练达则是懂了人情世故。
辜鸿铭
但在半个世纪以来,中国人的样子似乎却慢慢消失了,“假装情义”、“揣度他人”、“戾气满满”、“好利急功”,“无利不往来”、“傲慢无节制”几乎变成了社会主流价值观和社会低落情绪。
有时,难免觉得失望,失望后,便会在纸堆和画作中寻找。这几乎是近几代文人、导演、艺术家精神的重塑之路和必经之路。
李安找到了飘逸竹林,山河湖泊。在电影中找到了那个由竹林,湖水,内心节制构成的中国。
我也试图在《二十四史》里去找中国人的样子,试图在诸子文章里找中国人的样子,在《清明上河图》里找中国人的样子。后来发现,我试图找到的中国样子,都因过于遥远,而具象模糊。
我的手指根本无法触摸到遥远的中国人。
而在港台文人、导演那里,不经意间,一个动作,一个转身,一次抬头低头,依然会感受到很中国的存在,依旧可以从那里捕捉到传统中国人的蛛丝马迹,走路、行事、闲谈,这些瞬间都很具象而细微。 情义之间,也是真真切切,切切真真。
大陆,文化轮番更迭,社会多变动,价值观也多重塑,回头又会发现,我们丢得太多,也丢得过于彻底。所谓“中国人的样子”,也就这样在时代变革之中,作为代价牺牲掉了。
反倒是港台那些老派文人身上,一生多半四处飘零,却意外地留住了过去中国人的精气神,也留住了道德感和羞耻感。
他们身上,你还会捕捉到飘逸,精致,侠气、情义这些东西,都恰好还在,连内心的节制也是恰好还在。
世间最好的相遇,都是久别重逢.
↧
北京没能理解香港示威的核心内容
诚然,示威者关心《逃犯条例》修订草案,中国当局想要借机继续蚕食香港的法治。但是,这一切不仅仅事关那部法案。许多示威者感到自己的未来、自己的自由受到了威胁。当前的气氛,并非起因于对某一件具体事务的不满,而是出于对总体局势的愤怒。因此,即便中国当局在个别问题上让步,也于事无补。
“北京却没有明白这一点。毕竟在中国,凭借经济发展、加强管控来让民情稳定的做法一直在奏效。但是,香港与中国内地的不同之处,便是香港有着法治社会的传统,以及民主的习惯。不论中国接下来会做什么,这都带来了希望。”
《法兰克福汇报》以”北京迈向太平洋“为题,刊发评论指出,中国并没有因为贸易战、香港示威而瘫痪,反而正在悄然拓张对太平洋岛国的影响力。文章注意到,就在本周三(8月7日),巴布亚新几内亚政府请求中国为其全部政府债务进行再融资。
“这主意非常棒:中国迅速提供资金,展开全方位的援助。中国人协助修建桥梁、铺设道路,兴建学校和议员,还为原材料产业、农业带来最新的科技。如果巴布亚新几内亚新任总理的请求能够得到准许,那么他就能让其国家快速发展,从而巩固其权力。”
“当然,最迟到下任总理,中国人就会来讨债。种种迹象表明,巴布亚新几内亚届时会付出高昂的代价。而对于整个太平洋地区而言,代价更是肯定很高昂。”
“凭借区区70亿欧元的债务重组,中国取得了一把该地区的金钥匙。北京将能够获得镍等重要的矿产资源,获得渔业资源,从而保障自身的食物供给。这还只是开端。”
“如果巴布亚新几内亚届时无力偿还债务,就有可能被迫将天然气田、炼油厂等战略基础设施让与中国。北京已经在世界其他地方尝试过这种方法。而中国今后要求在这个岛国兴建海军基地,也是可以预料的。”
“中共当局正在用这种方式,越来越深地介入到穷困的太平洋地区诸岛国之中。西方国家不过是把这些国家视作气候变化的受害者,而北京则在很早前就认识到,这些国家的政府能够在国际谈判中发出重要的声音。”
“要是这些太平洋岛国能有其他选择,中国人的这种策略肯定会碰一鼻子灰。可是,民主国家除了表示要支持这些岛国,几乎没有更多的举动。近年来,习近平对这些岛国礼遇有加,特朗普却背过身去。该地区的澳大利亚,则因中国是其最大客户兼投资者,而无法过度刺激北京。”
“对于欧洲而言,太平洋远在地球的另一端。除了在当地有传统关系的法国,其他欧洲国家依然在忽视太平洋地区的地缘战略意义,而继续忙于处理自身的事务。”
↧
hk

↧
利用SinoDNS解决dns污染问题
在mac上。
先安装nodejs环境。然后,
npm -g install sinodns
然后,
sudo sinodns
实际使用例子:
sudo wg-quick up wg0
sudo networksetup -setdnsservers "Wi-Fi" 127.0.0.1
sudo sinodns
项目地址:https://github.com/isofew/sinodns
先安装nodejs环境。然后,
npm -g install sinodns
然后,
sudo sinodns
实际使用例子:
sudo wg-quick up wg0
sudo networksetup -setdnsservers "Wi-Fi" 127.0.0.1
sudo sinodns
项目地址:https://github.com/isofew/sinodns
↧
↧
利用ChinaDNSGo解决dns污染问题
在mac机器上。先安装go环境。
git clone https://github.com/guonaihong/ChinaDNSGo
cd ChinaDNSGo
git clone https://github.com/guonaihong/ChinaDNSGo
cd ChinaDNSGo
env GOPATH=`pwd` go get -u -v github.com/miekg/dns
env GOPATH=`pwd` go build src/chinadns.go
(在当前目录下,会生成可执行文件chinadns)
sudo ./chinadns -fn chnroute.txt
项目地址:https://github.com/guonaihong/ChinaDNSGo
实际使用例子:
sudo wg-quick up wg0
sudo networksetup -setdnsservers "Wi-Fi" 127.0.0.1
cd ~/ChinaDNSGo && sudo ./chinadns -fn chnroute.txt
↧
利用lucky-dns解决dns污染问题
先安装nodejs环境。然后,
npm -g install lucky-dns
然后,
sudo ldns --external 208.67.222.222
实际使用例子:
sudo wg-quick up wg0
sudo networksetup -setdnsservers "Wi-Fi" 127.0.0.1
sudo ldns --external 208.67.222.222
项目地址:https://github.com/vilic/lucky-dns
↧
一个全局翻墙的组件:global-over-greatfirewall
使用openvpn, chinaroute, chinadns, dhcp等组合完成实现全公司的国内外访问流量分流的智能翻墙。
一个全局翻墙的组件,使用openvpn, chinaroute, chinadns, dhcp等组合完成实现全局的 国内外访问流量的 智能分流
一个全局翻墙的组件,使用openvpn, chinaroute, chinadns, dhcp等组合完成实现全局的 国内外访问流量的 智能分流
安装步骤
- 首先需要一台不在墙内的服务器,比如香港或是一个vpn专线服务器。在该服务器配置openvpn server, 在你的网关服务器配置openvpn client,在server端开启全局代理
配置文件参考
openvpn-server.conf
openvpn-client.conf
ccd/ - 获取国内的IP列表http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest, 推列表中的IP段到本地国内网关,让流量从国内出去。github有项目可以提取国内的列表,或者自己写脚本筛
配置文件参考
ip-pre-up #这是我筛完的 - 获取正确的DNS,由于国内的DNS被污染,解析的地址不正确,所以使用ChinaDNS获取到正确的IP。在本地网关上搭建ChinaDNS,
git clone https://github.com/shadowsocks/ChinaDNS
cd ChinaDNS
./configure && make
src/chinadns-m -c chnroute.txt - 配置DHCP服务器,分发所有客户端的DNS为路由网关的IP
- 配置nat
-A POSTROUTING -s 192.168.x.0/24 ! -d 10.1.100.0/24 -j SNAT --to-source x.x.x.x #192.168.x.0/24为你的本地网络内网网段,掩码什么的自行匹配。x.x.x.x为你的额公网IP地址
-A POSTROUTING -s 192.168.x.0/24 -o tun0 -j MASQUERADE #配置你的流量经过openvpn client 网络接口tun0(一般默认)出去 - plugin目录里包含网络限速功能及openvpn自动恢复功能,后者需要添加到crond
- 启动方式可以参考rc.local, 或者可以放在openvpn-client.conf里启动,不过后者更慢。
from https://github.com/gayshub/global-over-greatfirewall
↧
利用全局(指整台机器的)代理-SNET翻墙
transparent proxy works on linux desktop, MacOS, router。
It's a solution like: (redsocks + ss-local)/ss-redir + ChinaDNS. But all in one binary, don't depend on dnsmasq.
For macos: pfctl is included by default, no extra dependences.
Example config.json:
Test (proxy-scope = bypassCN):
If you use it on router, change
You need to clean them manually(If restart snet, it will try to cleanup) or restart your laptop :(
Linux:
(下载地址:
https://github.com/monsterxx03/snet/releases/download/v0.5.0/snet_darwin_amd64
https://github.com/monsterxx03/snet/releases/download/v0.5.0/snet_linux_amd64 )
--------------
我的补充说明:
在mac机器上。
wget https://github.com/monsterxx03/snet/releases/download/v0.5.0/snet_darwin_amd64
chmod 755 snet_darwin_amd64
wget https://github.com/monsterxx03/snet/raw/master/config.json.example -O snet-config.json
nano snet-config.json
内容如下:
{
"listen-host": "127.0.0.1",
"listen-port": 1111,
"proxy-type": "ss",
"proxy-timeout": 5,
"proxy-scope": "bypassCN",
"http-proxy-host": "",
"http-proxy-port": 8080,
"http-proxy-auth-user": "",
"http-proxy-auth-password": "",
"ss-host": "vps-ip",
"ss-port": vps上的ss的端口号,
"ss-chpier-method": "aes-256-cfb",
"ss-passwd": "vps上的ss的密码",
"cn-dns": "223.6.6.6",
"fq-dns": "8.8.8.8",
"enable-dns-cache": true,
"enforce-ttl": 0,
"disable-qtypes": ["AAAA", "PTR"],
"force-fq": ["*.cloudfront.net", "*.amazonaws.com"],
"host-map": {},
"block-host-file": "",
"block-hosts": ["*.hpplay.cn"],
"mode": "local"
}
sudo ./snet_darwin_amd64 -config snet-config.json
会显示:
2019/08/10 09:46:28 /Users/yejia/repos/snet/server.go:26: Info:Proxy server listen on tcp: 127.0.0.1:1111
2019/08/10 09:46:29 /Users/yejia/repos/snet/redirector/pfctl_darwin.go:78: Error:exit status 1
2019/08/10 09:46:29 /Users/yejia/repos/snet/main.go:124: Fatal:exit status 1
yudeMacBook-Air:~ brite$ ls /Users/yejia/
ls: /Users/yejia/: No such file or directory
yudeMacBook-Air:~ brite$ mkdir -p /Users/yejia/repos/
mkdir: /Users/yejia/repos/: Permission denied
yudeMacBook-Air:~ brite$ sudo mkdir -p /Users/yejia/repos/
Password:
yudeMacBook-Air:~ brite$ cd /Users/yejia/repos/
yudeMacBook-Air:repos brite$ ls
yudeMacBook-Air:repos brite$ git clone https://github.com/monsterxx03/snet
fatal: could not create work tree dir 'snet': Permission denied
yudeMacBook-Air:repos brite$ sudo git clone https://github.com/monsterxx03/snet
yudeMacBook-Air:repos brite$ cd ~
yudeMacBook-Air:~ brite$ sudo ./snet_darwin_amd64 -config snet-config.json
2019/08/10 09:56:23 /Users/yejia/repos/snet/server.go:26: Info:Proxy server listen on tcp: 127.0.0.1:1111
2019/08/10 09:56:23 /Users/yejia/repos/snet/dns/server.go:109: Info:DNS server listen on udp: 127.0.0.1:1211
不要关闭此terminal窗口。
然后,你的整台mac机器就处于翻墙状态了。就好像连上了vpn一样。
------
技术文档
日常使用 Linux 工作, Linux 下实现全局透明代理可以用 iptables + ss-redir, 要有比较好的上网体验还需要 ChinaDNS 配合 dnsmasq, 这一整套在路由器上搞一遍就算了, 在本地太麻烦了. 仔细想想这几个加起来的功能实现起来也并不复杂, 前阵子就写了个小东西, 用一个进程完成全局透明代理 + ChinaDNS + 国内外分流: https://github.com/monsterxx03/snet
目前的限制:
需要手工装下 ipset.
配置文件示例:
cn-dns: 选择一个国内的 dns server.
fq-dns: 选择一个国外的干净的 dns server.
enable-dns-cache: 默认会按 A 记录的 TTL 缓存查询结果, 不需要可以关闭.
mode: 在桌面版 linux 上用选 local, 在 openwrt 路由器上选 router, 区别只是自动设置的 iptables 规则不一样.
解释下 SNET chain 里的内容:
除了设置 iptables, 这个程序具体只干了两件事:
DNS 部分讨了个巧, 一般处理 DNS 污染两种方式: 查询支持 EDNS 之类的加密协议的 DNS server, 或隧道到国外查询.
我目前的实现不支持 UDP, 就算支持了, 我也不想让 DNS 查询依赖上游 ss server 必须开启 UDP. 但现在既然已经有了 tcp 的加密隧道, 直接用呗, 没必要必须用支持 EDNS 的 server 呀.
DNS 协议其实本来就是支持 TCP 的, 只不过一般的流程是 client 发送 udp 的 DNS 查询, 如果 response 超过 512 字节, DNS header 中有个 TC 比特位会被置为1, client 会用 tcp 再发起一次 DNS 查询, server 用 tcp 返回完成的 response.
直接用 tcp 向 server 发送 DNS 查询 也行:
所以现在 DNS 部分的实现是: 收到 iptables 转发过来的 DNS 查询后, 会同时向 cn-dns 和 fq-dns 发送 DNS 查询, cn-dns 直接走 udp(所以在 SNET 中跳过了 cn-dns), fq-dns 通过 ss 走tcp.
如果 cn-dns 的返回结果是国内 ip 就用 cn-dns 的结果, 是国外 ip 就用 fq-dns 的结果. 这是 ChinaDNS 的逻辑, 这么做的前提是目前墙对被污染的域名只会返回国外 ip, (不然国内就乱掉了). 如果该网站在国内外都有 CDN, 也不会出现被跳转到国外站点去的情况(淘宝, 微博...). 网易云之类的也不会因为用国外 ip 而无法使用.
顺便根据 A 记录的 TTL 对查询结果做了个缓存, 目前工作良好.
测试 openwrt 的时候, 手头只有一台几年前的极路由2, 这东西架构是 32 位的 mips, 用 go 1.12 交叉编译后却跑不起来, 原来极路由的 cpu 不支持硬件浮点数运算指令, 需要在 openwrt 编译固件的时候开启 FPU 模拟, 重编译固件太麻烦啦, 后来查到 go 1.10 开始支持软件模拟浮点数,编译 mips 时加上环境变量
有的发行版开了 ipv6 后会在 /etc/resolv.conf 里加入一个本地 ipv6 的 dns server 地址, 如果它在第一行, snet 的 dns udp 重定向就没用了,需要关闭 ipv6 或把这条 nameserver 删掉.
------------------------------
完成 SNET初版后又做了些后续更新, 记录一点.
实现上 client 端要对接 http tunnel 非常简单:
shadowsocks-libev 对 udp 转发的支持是通过 iptables 里的 tproxy target 实现的, 尝试了一下 tproxy, 但是 tproxy 只能 用在 prerouting chain 里. 那意味着只能当该程序所在机器作为网关的时候才能接收到流量, 我写这个主要不是为了在路由器上 而是本机用, tproxy 就 pass 了.
还有一种方式是通过 tun 设备来实现流量接管, tun 工作在 3 层上, 从上面读出来的流量是裸的 ip 数据包. badvpn 之类的工具 实现了 tun2socks 的方式, 用 lwip 来在用户态实现 ip/tcp reassembly, 得到 tcp 流之后再转发给 socks5 程序. 好处是可以实现跨平台的流量接管.
还看到了一种非常扭曲的实现方式, 通过 raw socket 得到出去的 udp, 再用 普通的 socket 连回 udp client socket, 将数据写回: https://github.com/EtiennePerot/sshuttle/blob/master/firewall.py#L201脑洞很大, 看上去很麻烦...没尝试.
目前我对 udp 实在没什么需求, 暂时没什么动力弄了, 要做的话估计只能通过 tun 来搞(引入 lwip 总有点杀鸡用牛刀的感觉).
在 upsteam server 上试了下, 到 k8s api server 速度没问题.
抓包看了下 kubectl 发起 api 请求时候, 先尝试解析了 AAAA 记录, 如果 AAAA 记录不存在, 再尝试 A 记录, 貌似调用了 glibc 里 gethostname 函数的默认行为 都是这样的.
问题出在我实现的 DNS 缓存上, 简单的根据查询域名缓存了查询结果, 实际上我只解析 A 记录, 所以从缓存里取出来的都是 A 记录的结果.
重现方式:
修复很简单, cache key 把 query type 也加上就行啦.
from https://github.com/monsterxx03/blog/blob/master/content/posts/2019-04-10-snet-dev-notes.md
-------------
这两天得了空, 让 snet 支持了下 MacOS.
snet 的大致原理是通过系统防火墙的流量重定向功能,将所有去往国外的流量导到 snet 监听的端口, 在程序内部 将流量传递给上游的 proxy server(ss, http), 拿到响应后再回给客户端.
实现关键是要在 snet 内部获取到流量的原目标地址, 因为重定向之后 tcp connnection 的目标地址变成了 snet 监听 的地址.
Linux 上的实现,以前讲过: https://blog.monsterxx03.com/2019/03/31/snet-transparent-ss-proxy-on-linux/是通过
MacOS 上没有 iptables, 类似的工具是系统自带的 pfctl, 捣鼓了一下也能实现一样的功能.
流量重定向需要用到 pf 的
tricky 的地方是要把流量先重路由到 lo0, 再对 lo0 上的流量实行 rdr, 例子(顺序很重要):
Mac 上坑爹的地方在于, 虽然 darwin 内核里有 pf 模块, 但 MacOS 系统里没有对应的头文件,需要自己下载:
大致流程是:
It's a solution like: (redsocks + ss-local)/ss-redir + ChinaDNS. But all in one binary, don't depend on dnsmasq.
Features
- SS/http-tunnel as upstream server
- Sytemwide tcp proxy (via iptables redirect) on linux desktop/server, MacOS desktop
- Works on openwrt router
- Bypass traffic in China
- Handle DNS in the way like ChinaDNS, so website have CDN out of China won't be redirected to their overseas site
- Local DNS cache based on TTL
- block by domain name
Limation:
- tcp only (but dns is handled)
- ipv4 only
Tested on:
Desktop:- manjaro
- ubuntu 18.04
- MacOS 10.13.6
- hiwifi2
- ubnt er-x
Usage
For linux: ensure iptables and ipset installed in your system.For macos: pfctl is included by default, no extra dependences.
Example config.json:
{
"listen-host": "127.0.0.1",
"listen-port": 1111,
"proxy-type": "ss",
"proxy-timeout": 5,
# `bypassCN` or `global`, default to `bypassCN`
"proxy-scope": "bypassCN",
# config used when proxy-type is "http"
"http-proxy-host": "",
"http-proxy-port": 8080,
"http-proxy-auth-user": "",
"http-proxy-auth-password": "",
# config used when proxy-type is "ss"
"ss-host": "ss.example.com",
"ss-port": 8080,
# https://github.com/shadowsocks/shadowsocks-go/blob/1.2.1/shadowsocks/encrypt.go#L159
"ss-chpier-method": "aes-256-cfb",
"ss-passwd": "passwd",
"cn-dns": "114.114.114.114", # dns in China
"fq-dns": "8.8.8.8", # clean dns out of China
"enable-dns-cache": true,
"enforce-ttl": 0, # if > 0, will use this value otherthan A record's TTL
"disable-qtypes": ["AAAA"], # return empty dns msg for those query types
"force-fq": ["*.cloudfront.net"], # domain pattern matched will skip cn-dns query
"host-map": {
"google.com": "2.2.2.2" # map host and ip
},
"block-host-file": "", # if set, domain name in this file will return 127.0.0.1 to client
"block-hosts": ["*.hpplay.cn"], # support block hosts with wildcard
"mode": "local" # run on desktop: local, run on router: router
}
supported proxy-type:- ss: use ss as upstream server
- http: use http proxy server as upstream server(should support
CONNECT
method, eg: squid)
snet
will modify iptables/pf, root privilege is required.sudo ./snet -config config.json
Test (proxy-scope = bypassCN):
- curl
ifconfig.me
, ip should be your ss server ip. - curl
myip.ipip.net
, ip should be your local ip in China.
global
, both should return ss server ip.If you use it on router, change
mode
to router
, and listen-host should be your router's ip or 0.0.0.0
Notice
If crash or force killed(kill -9), snet will have no chance to cleanup iptables/pf rules, it will make you have no internet access.You need to clean them manually(If restart snet, it will try to cleanup) or restart your laptop :(
Linux:
sudo iptables -t nat -F
# if you install docker, docker's iptable rules will be flushed as well, just restart docker it will recreate them.
MacOS:sudo pfctl -d
Known issue:
- Manjaro's NetworkManager will create a ipv6 dns nameserver in /etc/resolv.conf, eg:
nameserver fe80::1%enp51s0
. If it's first nameserver, dns query will bypasssnet
(since I didn't handle ipv6), you need to disable ipv6 or put it on second line. - Chrome's cache for google.com is wired.If you can visit youtube.com or twitter.com, but can't open google.com, try to restart chrome to clean dns cache.
- cn-dns should be different with the one in your /et/resolv.conf, otherwise dns lookup will by pass snet (iptable rules in SNET chain)
(下载地址:
https://github.com/monsterxx03/snet/releases/download/v0.5.0/snet_darwin_amd64
https://github.com/monsterxx03/snet/releases/download/v0.5.0/snet_linux_amd64 )
--------------
我的补充说明:
在mac机器上。
wget https://github.com/monsterxx03/snet/releases/download/v0.5.0/snet_darwin_amd64
chmod 755 snet_darwin_amd64
wget https://github.com/monsterxx03/snet/raw/master/config.json.example -O snet-config.json
nano snet-config.json
内容如下:
{
"listen-host": "127.0.0.1",
"listen-port": 1111,
"proxy-type": "ss",
"proxy-timeout": 5,
"proxy-scope": "bypassCN",
"http-proxy-host": "",
"http-proxy-port": 8080,
"http-proxy-auth-user": "",
"http-proxy-auth-password": "",
"ss-host": "vps-ip",
"ss-port": vps上的ss的端口号,
"ss-chpier-method": "aes-256-cfb",
"ss-passwd": "vps上的ss的密码",
"cn-dns": "223.6.6.6",
"fq-dns": "8.8.8.8",
"enable-dns-cache": true,
"enforce-ttl": 0,
"disable-qtypes": ["AAAA", "PTR"],
"force-fq": ["*.cloudfront.net", "*.amazonaws.com"],
"host-map": {},
"block-host-file": "",
"block-hosts": ["*.hpplay.cn"],
"mode": "local"
}
sudo ./snet_darwin_amd64 -config snet-config.json
会显示:
2019/08/10 09:46:28 /Users/yejia/repos/snet/server.go:26: Info:Proxy server listen on tcp: 127.0.0.1:1111
2019/08/10 09:46:29 /Users/yejia/repos/snet/redirector/pfctl_darwin.go:78: Error:exit status 1
2019/08/10 09:46:29 /Users/yejia/repos/snet/main.go:124: Fatal:exit status 1
yudeMacBook-Air:~ brite$ ls /Users/yejia/
ls: /Users/yejia/: No such file or directory
yudeMacBook-Air:~ brite$ mkdir -p /Users/yejia/repos/
mkdir: /Users/yejia/repos/: Permission denied
yudeMacBook-Air:~ brite$ sudo mkdir -p /Users/yejia/repos/
Password:
yudeMacBook-Air:~ brite$ cd /Users/yejia/repos/
yudeMacBook-Air:repos brite$ ls
yudeMacBook-Air:repos brite$ git clone https://github.com/monsterxx03/snet
fatal: could not create work tree dir 'snet': Permission denied
yudeMacBook-Air:repos brite$ sudo git clone https://github.com/monsterxx03/snet
yudeMacBook-Air:repos brite$ cd ~
yudeMacBook-Air:~ brite$ sudo ./snet_darwin_amd64 -config snet-config.json
2019/08/10 09:56:23 /Users/yejia/repos/snet/server.go:26: Info:Proxy server listen on tcp: 127.0.0.1:1111
2019/08/10 09:56:23 /Users/yejia/repos/snet/dns/server.go:109: Info:DNS server listen on udp: 127.0.0.1:1211
不要关闭此terminal窗口。
然后,你的整台mac机器就处于翻墙状态了。就好像连上了vpn一样。
------
技术文档
日常使用 Linux 工作, Linux 下实现全局透明代理可以用 iptables + ss-redir, 要有比较好的上网体验还需要 ChinaDNS 配合 dnsmasq, 这一整套在路由器上搞一遍就算了, 在本地太麻烦了. 仔细想想这几个加起来的功能实现起来也并不复杂, 前阵子就写了个小东西, 用一个进程完成全局透明代理 + ChinaDNS + 国内外分流: https://github.com/monsterxx03/snet
目前的限制:
- 不支持 ipv6
- 只支持 tcp (因为我的测试服务器不支持 udp, 以后再加上吧)
- 上游 server 只支持 ss
需要手工装下 ipset.
配置文件示例:
{
"listen-host": "127.0.0.1",
"listen-port": 1111,
"ss-host": "ss.example.com",
"ss-port": 8080,
"ss-chpier-method": "aes-256-cfb",
"ss-passwd": "passwd",
"cn-dns": "114.114.114.114",
"fq-dns": "8.8.8.8",
"enable-dns-cache": true,
"mode": "local"
}
ss 协议实现用的是 shadowsocks-go, 所以 cipher 就是 go 版支持的那些: https://github.com/shadowsocks/shadowsocks-go/blob/1.2.1/shadowsocks/encrypt.go#L159cn-dns: 选择一个国内的 dns server.
fq-dns: 选择一个国外的干净的 dns server.
enable-dns-cache: 默认会按 A 记录的 TTL 缓存查询结果, 不需要可以关闭.
mode: 在桌面版 linux 上用选 local, 在 openwrt 路由器上选 router, 区别只是自动设置的 iptables 规则不一样.
sudo ./snet -config config.json
就能跑起来啦, 并接管了全局的 TCP 流量.实现
看一下用 local 模式启动时候到底干了什么,iptables -t nat -L
:Chain OUTPUT (policy ACCEPT)
target prot opt source destination
SNET tcp -- 0.0.0.0/0 0.0.0.0/0
SNET udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53
Chain SNET (2 references)
target prot opt source destination
RETURN tcp -- 0.0.0.0/0 0.0.0.0/0 match-set BYPASS_SNET dst
REDIRECT tcp -- 0.0.0.0/0 0.0.0.0/0 redir ports 1111
RETURN all -- 0.0.0.0/0 114.114.114.114
DNAT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53 to:127.0.0.1:1111
我建了一张叫 SNET 的 chain, 并把所有出去的 tcp 流量和查询 53 端口的 udp 流量(dns) 转到这个 chain 里.解释下 SNET chain 里的内容:
- 在
BYASS_SNET
这个 ipset 中的 ip 全部跳过, 里面是保留 ip 段 + cn ip 段 + ss server ip(不然就死循环啦). - 剩下的所有 tcp 流量全部重定向到本地的 1111 端口(snet 的监听端口)
- 所有 114 dns 的流量不处理(配置文件里 设置的 cn-dns).
- 剩余的发往 53 端口 udp 全部转发到 snet 监听的 udp 端口.
BYPASS_SNET
的内容可以用 ipset list BYPASS_SNET
查看.除了设置 iptables, 这个程序具体只干了两件事:
- 将转发过来的 tcp 流量用 ss 协议转发到 ss server.
- 绕过 dns 污染, 并实现 ChinaDNS 的功能.
getsockopt(fd, SOL_IP, SO_ORIGINAL_DST, dstaddr, &socklen)
实现的: https://github.com/darkk/redsocks/blob/release-0.5/base.c#L223DNS 部分讨了个巧, 一般处理 DNS 污染两种方式: 查询支持 EDNS 之类的加密协议的 DNS server, 或隧道到国外查询.
我目前的实现不支持 UDP, 就算支持了, 我也不想让 DNS 查询依赖上游 ss server 必须开启 UDP. 但现在既然已经有了 tcp 的加密隧道, 直接用呗, 没必要必须用支持 EDNS 的 server 呀.
DNS 协议其实本来就是支持 TCP 的, 只不过一般的流程是 client 发送 udp 的 DNS 查询, 如果 response 超过 512 字节, DNS header 中有个 TC 比特位会被置为1, client 会用 tcp 再发起一次 DNS 查询, server 用 tcp 返回完成的 response.
直接用 tcp 向 server 发送 DNS 查询 也行:
dig baidu.com @1114.114.114.114 +tcp
.所以现在 DNS 部分的实现是: 收到 iptables 转发过来的 DNS 查询后, 会同时向 cn-dns 和 fq-dns 发送 DNS 查询, cn-dns 直接走 udp(所以在 SNET 中跳过了 cn-dns), fq-dns 通过 ss 走tcp.
如果 cn-dns 的返回结果是国内 ip 就用 cn-dns 的结果, 是国外 ip 就用 fq-dns 的结果. 这是 ChinaDNS 的逻辑, 这么做的前提是目前墙对被污染的域名只会返回国外 ip, (不然国内就乱掉了). 如果该网站在国内外都有 CDN, 也不会出现被跳转到国外站点去的情况(淘宝, 微博...). 网易云之类的也不会因为用国外 ip 而无法使用.
顺便根据 A 记录的 TTL 对查询结果做了个缓存, 目前工作良好.
一些小坑
开始时候没看 RFC, 处理 tcp DNS 的时候直接把 UDP payload 通过 tcp 灌过去了, 以为 DNS 协议里是有 length, 结果怎么都不对, 后来才发现要在 UDP 的 DNS 数据包前面加两字节标记长度才行(DNS 协议的 header 里并没有包长度...)测试 openwrt 的时候, 手头只有一台几年前的极路由2, 这东西架构是 32 位的 mips, 用 go 1.12 交叉编译后却跑不起来, 原来极路由的 cpu 不支持硬件浮点数运算指令, 需要在 openwrt 编译固件的时候开启 FPU 模拟, 重编译固件太麻烦啦, 后来查到 go 1.10 开始支持软件模拟浮点数,编译 mips 时加上环境变量
GOMIPS=softfloat
就行了.有的发行版开了 ipv6 后会在 /etc/resolv.conf 里加入一个本地 ipv6 的 dns server 地址, 如果它在第一行, snet 的 dns udp 重定向就没用了,需要关闭 ipv6 或把这条 nameserver 删掉.
后续
目前个人的需求基本已经满足啦, 可能还需要的是:- 按域名指定使用 cn-dns 或 fq-dns 的结果(有时还真是需要访问海外站)
- 加点统计接口:域名查询, 流量分析...
------------------------------
完成 SNET初版后又做了些后续更新, 记录一点.
支持 http tunnel
配置文件里增加一个proxy-type
选项, 默认为 ss
, 可改成 http
, 这样可以将 支持 http tunnel 的代理服务器作为 upstream(例如 squid). 填上 http-proxy-
开头 的选项就行.实现上 client 端要对接 http tunnel 非常简单:
- client 发送请求:
Connect tgt-host:tgt-port HTTP/1.1
- server response:
HTTP/1.1 200
, 即表示 server 端支持 http tunnel - client 后续向该 tcp connection 写入的数据都会被 server 转发到 tgt-host:tgt-port
Proxy
interface 出来, 后续想对接其他协议方便扩展.对 udp 支持的尝试
对 tcp 流量的转发能通过 iptables REDIRECT 实现的, 通过 getsockoption 可以知道 tcp connection 的原目标, 但这对 udp 行不通, REDIRECT 之后拿不到原 target.shadowsocks-libev 对 udp 转发的支持是通过 iptables 里的 tproxy target 实现的, 尝试了一下 tproxy, 但是 tproxy 只能 用在 prerouting chain 里. 那意味着只能当该程序所在机器作为网关的时候才能接收到流量, 我写这个主要不是为了在路由器上 而是本机用, tproxy 就 pass 了.
还有一种方式是通过 tun 设备来实现流量接管, tun 工作在 3 层上, 从上面读出来的流量是裸的 ip 数据包. badvpn 之类的工具 实现了 tun2socks 的方式, 用 lwip 来在用户态实现 ip/tcp reassembly, 得到 tcp 流之后再转发给 socks5 程序. 好处是可以实现跨平台的流量接管.
还看到了一种非常扭曲的实现方式, 通过 raw socket 得到出去的 udp, 再用 普通的 socket 连回 udp client socket, 将数据写回: https://github.com/EtiennePerot/sshuttle/blob/master/firewall.py#L201脑洞很大, 看上去很麻烦...没尝试.
目前我对 udp 实在没什么需求, 暂时没什么动力弄了, 要做的话估计只能通过 tun 来搞(引入 lwip 总有点杀鸡用牛刀的感觉).
dns 处理的一个 bug
用了一整子一直都很稳定, 但今天在用 kubectl 倒腾 k8s 的时候发现了问题, k8s cluster 在国外, api server 也是国外 ip. 开了 snet 后用 kubectl 巨慢无比, 而且经常 timeout. 关了 snet 直连却很快.在 upsteam server 上试了下, 到 k8s api server 速度没问题.
kubectl version -v=10
能打印出对应 http request 的 curl 命令, 拷贝出来用 curl 直接试了下, 也没问题, 只有用 kubectl 的时候才会 timeout.抓包看了下 kubectl 发起 api 请求时候, 先尝试解析了 AAAA 记录, 如果 AAAA 记录不存在, 再尝试 A 记录, 貌似调用了 glibc 里 gethostname 函数的默认行为 都是这样的.
问题出在我实现的 DNS 缓存上, 简单的根据查询域名缓存了查询结果, 实际上我只解析 A 记录, 所以从缓存里取出来的都是 A 记录的结果.
重现方式:
- dig www.baidu.com
- dig -t AAAA www.baidu.com
修复很简单, cache key 把 query type 也加上就行啦.
from https://github.com/monsterxx03/blog/blob/master/content/posts/2019-04-10-snet-dev-notes.md
-------------
这两天得了空, 让 snet 支持了下 MacOS.
snet 的大致原理是通过系统防火墙的流量重定向功能,将所有去往国外的流量导到 snet 监听的端口, 在程序内部 将流量传递给上游的 proxy server(ss, http), 拿到响应后再回给客户端.
实现关键是要在 snet 内部获取到流量的原目标地址, 因为重定向之后 tcp connnection 的目标地址变成了 snet 监听 的地址.
Linux 上的实现,以前讲过: https://blog.monsterxx03.com/2019/03/31/snet-transparent-ss-proxy-on-linux/是通过
SO_ORIGINAL_DST
这个 socket option 实现的.MacOS 上没有 iptables, 类似的工具是系统自带的 pfctl, 捣鼓了一下也能实现一样的功能.
用 pfctl 做流量重定向
pfctl 的文档可以通过man pfctl
, man pf.conf
查看. 我也只是看了个大概, 细节并不清楚.流量重定向需要用到 pf 的
rdr
规则, 但是 rdr
只能处理 incoming 的流量,对 outgoing 的流量无效.tricky 的地方是要把流量先重路由到 lo0, 再对 lo0 上的流量实行 rdr, 例子(顺序很重要):
dev="en0"
lo="lo0"
rdr on $lo proto tcp from $dev to any port 1:65535 -> 127.0.0.1 port 1100 # let proxy handle tcp
pass out on $dev route-to $lo proto tcp from $dev to any port 1:65535 # re-route outgoing tcp
获取重定向后流量的原始目标地址
darwin 上没有SO_ORIGINAL_DST
, 翻了点 OpenBSD 的资料, 找到了几段通过 C 获取原地址的代码, 尝试用 CGO 做 wrapper, 最后试成功了.Mac 上坑爹的地方在于, 虽然 darwin 内核里有 pf 模块, 但 MacOS 系统里没有对应的头文件,需要自己下载:
- https://github.com/opensource-apple/xnu/blob/master/bsd/net/pfvar.h
- https://github.com/opensource-apple/xnu/blob/master/bsd/net/radix.h
- https://github.com/opensource-apple/xnu/blob/master/libkern/libkern/tree.h
大致流程是:
- 初始化 struct
pfioc_natlook
- 填充 client socket 的 source ip, source port
- 填充 proxy bind socket 的 ip, port
- 打开 /dev/pf,执行
ioctl(fd, DIOCNATLOOK,
) - 然后 struct 的 rdaddr, rdxport 就被填充了,这就是我们需要的原始地址。
↧
↧
ChinaDNS for OpenWrt
简介
本项目是 ChinaDNS在 OpenWrt 上的移植。当前版本: 1.3.2-3
预编译 IPK 下载
编译
- 从 OpenWrt 的 SDK编译
#以 ar71xx 平台为例
tar xjf OpenWrt-SDK-ar71xx-for-linux-x86_64-gcc-4.8-linaro_uClibc-0.9.33.2.tar.bz2
cd OpenWrt-SDK-ar71xx-*
#获取 Makefile
git clone https://github.com/aa65535/openwrt-chinadns.git package/chinadns
#选择要编译的包 Network -> ChinaDNS
make menuconfig
#开始编译
make package/chinadns/compile V=99
配置
- 默认 DNS 服务器端口为
5353
, 可使用 LuCI进行配置 - 可搭配路由器自带的 Dnsmasq 使用 借助其 DNS 缓存提升查询速度
LuCI 中定位至「网络 - DHCP/DNS」
「基本设置」 本地服务器填写127.0.0.1#5353
「HOSTS和解析文件」勾选 忽略解析文件 - /etc/chinadns_chnroute.txt可以使用下面命令更新
wget -O- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest'| awk -F\|'/CN\|ipv4/ { printf("%s/%d\n", $4, 32-log($5)/log(2)) }'> /etc/chinadns_chnroute.txt
Name | Description | |||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
openwrt-dnsmasq | Dnsmasq Patch & Makefile for OpenWrt | |||||||||||||||||||||||||||||
openwrt-shadowsocks | Shadowsocks-libev for OpenWrt | |||||||||||||||||||||||||||||
openwrt-shadowvpn | ShadowVPN for OpenWrt | |||||||||||||||||||||||||||||
openwrt-dist-luci | LuCI Applications for OpenWrt-dist | |||||||||||||||||||||||||||||
openwrt-redsocks2 | RedSocks2 for OpenWrt |
↧
年代向錢看 習近平是川普眼中的「流氓政權」!貿易戰打趴中國!
太好了,就是要彻底打趴共匪中國,让不自量力的/不知天高地厚的习猪头和共匪集团看清他们自己。
↧
美国首斥中共是流氓政权!西方会公开中国权贵子弟的资料吗?
中美贸易战陷入僵局,金融战又开始热身, 没有想到中美关系急速恶化的程度比我们原来预计的还要严重。
今天美国国务院召开了新闻发布会, 新闻发言人摩根女士直接斥责中共的政权是流氓政权, 是凶残的政权——用如此严重的口气指责中国政府, 好象是近几十年来我第一次听到。而且,在外交场合上, 由负责外交的部门发言人去指责这个强大的中国政权是不可想象的。
按照美国国务院所认定的, 他们的一位外交官小孩的材料被中国政府泄露出去—— 在一些中国人或者是中国政权一些人看起来,这似乎是一个小事。 我不知道中国政府将会就此做出什么样的解释,但是我们很清楚, 这样一种指责意味着中美关系会继续的恶化下去。
如果公布美国外交官家人的资料作为对美国的一种打击的话, 那相比之下,中国的官员、中国的权贵,这些年来他们的子弟、 家人在西方国家尤其在美国,他们的人数、 他们可能涉及到一些非法的行为, 毫无疑问会远远超过美国官员的子弟在中国的情况。 如果是美国政府也采取这种流氓的行为, 去公布中国权贵子弟的这些资料,这是一种什么样的状况?
毫无疑问,这触犯了人伦最基本的底线。中国有一句话叫「 不斩来者」,外交官就是来者。 你不但在这些天莫名其妙地指责美国外交官的正常外交行为, 居然还把人家外交官的家人资料给泄露出来, 除非中国政府能证明这跟政府没有关系。
在昨天的《点点今天事》节目中间,关于最近香港所发生的事情, 我举了两个在我看起来是谣传的例子。 第一个是在自由社交媒体里面有人指责在香港出现的一些警察的行为 有异样, 认为这是内地的中共的军警人员伪装成香港的警察前往香港执法。 以我的常识和理性判断,这应该是谣传,我罗列了一些理由: 那种伪装成香港警察的执法太危险,太容易暴露, 而且从现实的角度来讲也没有这个必要。 对于很多不信任中共政权的人来讲,认为这完全可能。 我没有足够的证据来证明没有内地的军警人员伪装成香港的警察, 但是我还是认为这种可能性极低,我认为它是个谣言。 我希望大家对各种类似的说法要有所警觉和判断。
我又讲到美国的外交官去见黄之锋和一些香港的年轻人是一种很正常 的外交行为,而且根本谈不上密会,他们是在万豪酒店—— 一个公开而且繁华的酒店见面。如果真正是密会, 完全可以在美国驻香港的总领馆进行。 黄之锋或者其他人去总领馆没有问题, 无数的人去领馆办证件或者办其他事情都是正常的, 那不是更容易隐蔽吗?
一个外交官到另外一个国家去工作,除了去传递友好的信息以外, 其中还有一个功能就是掌握了解所在地发生的各种各样的事情, 以便对他们国家的外交或者是其它的政策提供一些参考指引。 事实上,就在当天还是最近几天, 美国的外交官不但跟一批年轻人接触, 他们也跟亲共团体或者叫建制派接触,也跟一些范民团体进行接触— —这种接触不但是西方外交官的正常形态, 也是中国或者是其它国家外交官的正常形态。所以, 以他们面会来证明美国政府策划或者指导这一次的游行抗议示威完全 是不实的。
我没有想到的是, 随即中国的外交部香港特派员公署居然约见了美国的外交官, 对他们提出了严重的交涉——这在我看起来已经是不可思议了, 但是更不可思议的是,居然出现了外交官家人的资讯被公开的状况。 这触犯了所谓的基本的红线,或者是突破了基本的底线。 而这个底线不是国家、政党、政治的范畴,而是人伦的底线, 所以才出现美国国务院的官员如此的愤怒, 用如此严厉的语言来指责中国政府。
我不知道中国政府什么时候可以就美国国务院发言人的指责作出回应 ,想必中国政府不会保持沉默。 如果是中国政府能够作出令人信服的解释, 证明这不是中国政府的行为,那么美国国务院的指责是没有道理, 而且应该向中国政府道歉;但是如果像美国国务院像所认定的那样, 这是中国政府行为,而且有确凿的证据, 那么中国政府就会在国际社会遭到鄙视或者指责。对中美关系来讲, 不仅为中美贸易谈判造成更不好的气氛, 而且会在其它很多中美合作领域都会因为有这个事件受到很大的伤害 。
现在香港出现的几万人、几十万人, 甚至到两百万人的集会和抗议主要是针对林郑月娥—— 不但是她的无能,而且是愚蠢, 是对故意挑起香港的对立和冲突的行为的抗议。 要求的是落实和执行中央政府一直跟大家推行的一国两制, 落实的是中华人民共和国香港基本法,港人治港, 由香港人为自己的行为来承担责任。
而作为「一国」来讲,香港的防务由解放军驻香港部队去完成, 香港的外交由中华人民共和国驻香港特派员公署来完成, 再加上中央人民政府驻香港联络办公室, 这些都毫无疑问地掌控了香港的「一国」,香港是中国的一部分。 按国际法理和现实的国际政治来讲,「一国」 的原则根本就没有受到冲击和毁坏, 也不是这一次的游行示威的诉求,更不要说是主要诉求。
但是,这几天中共港澳系统的领导人张晓明和中联办主任王志民, 还有一些其他的中国官员,比如说全国政协副主席董建华, 他们把民众的政治诉求扭曲成是美国和台湾在后面操纵的结果。 很显然,他们拿不出真正的证据, 因为香港的几十万几百万人是美国政府或者台湾政府能够收买操控和 指挥的, 所以就把美国的外交官去和香港年轻人接触的正常行为扭曲成为美国 政府干预和操纵香港局势的铁证——这种指责已经够荒唐, 还出现了美国国务院发言人所指责的把人家的隐私信息公布出来的行 为。
这样一种行为是非常令人恐惧和可怕的, 它是今天中国政治神经错乱的必然反应。 这就是我们对中国的前途非常担忧的地方, 今天中国的伦理已经丧失了,不仅是政治伦理、外交伦理, 尤其是做人的基本伦理,这才是令我们真正忧心的地方。
↧