问题描述
目标:当我的笔记本电脑连接到开放式热点/接入点时,我希望能够通过家用电脑安全地使用互联网。
我知道我可以使用SSH隧道/SOCKS代理,但我不想乱用应用程序(如果可能的话,让他们使用它)。我想我需要的是OpenVPN设置,所以我正在寻找有关如何:
-
安装并设置OpenVPN服务器
-
设置OpenVPN客户端(NetworkManager)
应该使用的Ubuntu版本是10.10和11.04。
最佳解决思路
几个月前我有确切的问题,但另外,如果可能的话,我希望有一个IPv6连接。您可能对我在Serverfault上的问题感兴趣:
-
How do I configure OpenVPN for accessing the internet with one NIC?
-
How can I setup OpenVPN with IPv4 and IPv6 using a tap device?
我的服务器上只有一个NIC(“network interface”)供使用。在我的设置中,NetworkManager是不够的,因为我需要运行自定义脚本来支持IPv6。但是为了简单起见,我将在此处使用NetworkManager并省略IPv6支持。
首先,只需要对身份验证方法做出决定。我将使用更安全的证书方法,其工作方式类似于SSL:在握手期间,选择将用于会话的公共秘密。其他方法是共享密钥;用户名和密码。
Server
1.准备
首先,安装openvpn服务器。这和sudo apt-get install openvpn
一样简单。困难的部分是配置它。配置存在于/etc/openvpn
中。
2.配置身份验证
服务器需要证书来识别自身及其客户端。从CA(通用授权机构)检索这些证书。证书和相关私钥的创建可以在任何机器上完成,不必在服务器上完成。如果你真的很偏执,你应该在没有连接到网络的机器上进行,并使用 memory 棒来传输证书。
为服务器创建CA和证书
除非您的CA的私钥受到损害,否则此步骤必须完成一次。在这种情况下,可以创建有效的证书,这些证书将被服务器接受,从而导致安全漏洞。
official documentation建议在/etc/openvpn
中进行给药。我不是以root身份运行所有东西的忠实粉丝,所以我会将它放在不同的目录中。
-
创建管理目录并通过运行以下命令复制其中的文件:
mkdir ~/openvpn-admin cd ~/openvpn-admin cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/ ./easy-rsa cd easy-rsa
-
根据需要编辑
vars
中的默认值,例如设置KEY_SIZE=2048
,因为您是偏执狂。 -
通过运行以下命令加载变量并创建密钥目录:
. vars
-
如果出现
No ... openssl.cnf file could be found
错误,请运行
Further invocations will failln -s openssl-1.0.0.cnf openssl.cnf
,然后再次运行. vars
。 -
如果这是您第一次使用此CA,请准备密钥环境。如果要维护以前创建的CA,请不要运行此命令。这样做将要求您部署新的
ca.crt
。./clean-all
-
通过执行
./build-ca
创建CA.您可以填写所需的任何详细信息,但请注意,当客户端连接到服务器时,此信息将显示在日志文件中。这将在子文件夹keys
中创建文件ca.key
和ca.crt
。在任何情况下都要保密ca.key
文件。如果不这样做,任何拥有密钥的人都可以连接到您的服务器。 -
如果您的先前证书已丢失或已过期,则需要先使用
./revoke-full server
撤消旧证书。否则会出现数据库错误。 -
通过运行以下命令为服务器创建证书:
./build-key-server server
当要求输入密码时,请将其保留为空,除非您每次启动服务器时都愿意输入密码(不推荐)。签署证书并提交时确认。两个新文件将出现在目录
keys
中:server.key
和server.crt
。
DH和使用准备tls-auth
使用以下方法生成Diffie-Hellman参数:
./build-dh
根据hardening tips,使用tls-auth
。为此,使用以下命令生成shared-secret密钥:
openvpn --genkey --secret ta.key
生成的文件(ta.key
)也必须分发给客户端,但不应将其公开。
为客户创建证书
对于每个客户,应重复这些步骤:
-
输入您在其中创建CA和服务器证书的目录:
cd ~/openvpn-admin/easy-rsa
-
如果您已经跳过了CA创建步骤,那么您需要首先加载变量:
. vars
-
如果要创建新证书,因为旧证书丢失或过期,则需要先使用
./revoke-full you
撤消旧证书。否则会出现数据库错误。 -
创建客户端证书
you.key
及其对应的证书you.crt
:./build-key you
CommonName
应该是独一无二的。如果你正在使用KDE,请将密码保留为空,因为从10.10开始它还不支持。与生成服务器证书一样,确认签署证书并提交更改。
3.设置OpenVPN服务
默认情况下,OpenVPN在接受连接时以root身份运行。如果服务可以从邪恶的互联网上获得,那不是一个好主意。
-
为OpenVPN创建一个专用用户,比如说
openvpn
:sudo useradd openvpn
-
将文件
server.key
,server.crt
,ca.crt
和dh1024.pem
(如果已更改密钥大小,则为dh2048.pem
)从密钥目录复制到/etc/openvpn
。 400(read-only为业主)的许可是好的。sudo cp ~/openvpn-admin/easy-rsa/keys/{server.key,server.crt,ca.crt,dh*.pem} /etc/openvpn sudo chmod 400 /etc/openvpn/{server.key,server.crt,ca.crt}
-
复制文件
ta.key
:sudo cp ~/openvpn-admin/easy-rsa/ta.key /etc/openvpn sudo chmod 400 /etc/openvpn/ta.key
-
创建文件
/etc/openvpn/server.conf
并将下一行放入其中:proto udp dev tap ca ca.crt cert server.crt key server.key dh dh1024.pem server 10.8.0.0 255.255.255.0 push "redirect-gateway def1" ifconfig-pool-persist ipp.txt keepalive 10 120 tls-auth ta.key 0 # Compress data to save bandwidth comp-lzo user openvpn group openvpn persist-key persist-tun # Logs are useful for debugging log-append openvpn-log verb 3 mute 10
-
在它上面设置适当的权限,它不需要保密,但我不想泄露配置细节,所以:
sudo chmod 640 /etc/openvpn/server.conf
4.完成服务器
如果您已在服务器上创建了证书,则最好对其进行加密或将其从服务器上移除。在任何情况下,都不要丢失ca.key
和server.key
。在第一种情况下,其他人将能够连接到您的服务器。在后者中,MITM是可能的。
Client
除服务器IP地址外,服务器管理员还应移交以下文件:
-
ca.crt
:用于验证证书 -
server.crt
:用于验证服务器并与之通信 -
ta.key
:用于加强安全性 -
you.crt
:用服务器标识自己 -
you.key
:就像你的密码一样,文件权限应为400(所有者为read-only)
1.安装
安装OpenVPN和NetworkManager插件(适用于KDE和Gnome):
sudo apt-get install openvpn network-manager-openvpn
network-manager-openvpn
位于Universe存储库中。
2.配置
在控制面板中,使用以下详细信息:
-
网关:服务器IP地址
-
键入:“证书(TLS)”(Gnome)或“X.509证书”(KDE)
-
CA证书:
ca.crt
的路径 -
用户证书:
you.crt
的路径 -
私钥:
you.key
的路径
在高级:
-
网关端口:自动(1194)(不需要更改)
-
使用LZO数据压缩:启用
-
使用TCP连接:禁用
-
使用TAP设备:已启用
-
密码:默认
-
HMAC身份验证:默认
-
使用TLS-authentication:enabled指定
ta.key
的密钥文件路径,并将”Key Direction”设置为1
。 -
(todo – 检查出来)服务器推送默认网关,以便所有流量通过VPN连接。我最后一次检查时,network-manager-openvpn插件没有这样做。
如果无法使用NetworkManager或不想使用它,请将文件(ca.crt
,…)放在/etc/openvpn
中并创建文件/etc/openvpn/client.conf
文件:
client
dev tap
proto udp
# replace 1.2.3.4 by your server IP
remote 1.2.3.4 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert you.crt
key you.key
ns-cert-type server
tls-auth ta.key 1
comp-lzo
user nobody
group nogroup
verb 3
mute 20
如果您不想在启动时启用此VPN,请编辑/etc/default/openvpn
并通过删除#
取消注释下一行:
#AUTOSTART="none"
要启动此连接,请运行:
sudo /etc/init.d/openvpn start client
如果配置文件未命名为client.conf
,则应重命名client
。示例:如果已将配置文件命名为safe.conf
,则需要运行sudo /etc/init.d/openvpn start safe
。
要停止OpenVPN,您必须运行:
sudo /etc/init.d/openvpn stop
次佳解决思路
你实际上并不需要摆弄任何应用程序。这就像“VPN一样”。
-
首先安装
tsocks
包(临时袜子):sudo apt-get install tsocks
-
然后编辑
/etc/tsocks.conf
并输入server = 127.0.0.1 server_port = 3333
-
现在,打开一个终端并输入(这会连接你):
ssh -ND 3333 ssh.url.to.your.home.machine
-
运行(通过另一个终端或ALT-F2):
tsocks firefox
现在,Firefox将所有通信传输到SSH创建的计算机上的SOCKS服务器。这进一步通过隧道传输到您的家用机器,然后进入网络。您的家庭计算机上只需要一台SSH服务器。在第一次之后,只需重复步骤3和4。
它就像一个魅力!唉, chrome 不喜欢tsocks,但嘿,Firefox的作用。