是什么?中文翻译叫做:虚拟专用网络。功能是,在公用网络上建立专用网络,进行加密通讯。
适用的场合:
1.你的公司网络在一个局域网,不能外部访问。有一天你外出度假了,想访问一下公司的内部网络,外网是不能直接访问的。如果公司的网络有一台主机设置了,你就可以通过连上这台主机,来访问公司内部网络啦。
2.如果你的主机是在国外,你可以在这台主机上配置,然后你的电脑连上之后就可以啦。
3.某台服务器(如游戏服务器)限制了一些IP连接到它上面,这时你配置,连上之后,就可以继续访问那台服务器。
我们以Ubuntu为例,说一下怎样配置服务器。
1、用root账户登陆服务器
2、安装PPTPD
apt-get install pptpd
3、编辑pptpd.conf文件
vi /etc/pptpd.conf
取消注释下面内容
localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245
这几句的意思是:当外部计算机通过pptp联接到后所能拿到的ip地址范围和服务器的ip地址设置。
4、添加用于登陆的账户
vi /etc/ppp/chap-secrets
格式如下:
# client server secret IP addresses
cqc pptpd 123456 *
从左到右依次是用户名,自己指定。服务器,填写pptpd,密码,自己指定。IP,填*即可。中间用空格分别隔开。
5、设置DNS解析,编辑pptpd-options文件
vi /etc/ppp/pptpd-options
找到ms-dns,取消掉注释,并修改DNS地址,这里我推荐大家用
Google DNS 8.8.8.8 和 8.8.4.4
更改为如下内容
ms-dns 8.8.8.8
ms-dns 8.8.4.4
6、开启转发
vi /etc/sysctl.conf
取消注释以下内容
net.ipv4.ip_forward=1
这句话意思是:打开内核IP转发
更新一下配置
sudo sysctl -p
7、安装iptables并设置
apt-get install iptables
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
后面这句话作用是:立刻让LINUX支持NAT(platinum)
8、重新启动服务
/etc/init.d/pptpd restart
9、大功告成,服务器就这么配置好啦。
接下来,利用IP地址,刚才设置的账号和密码,就可以连你的啦。
服务器端需要安装 nfs-kernel-server 软件包:
$ sudo apt-get update
$ sudo apt-get install nfs-kernel-server
默认情况下,NFS 服务器上定义了某个共享目录,则该目录及其子目录下的所有文件都可被访问。
出于对安全的考虑,客户端任何需要 超级用户 (即 root 用户,UID=0 &GID=0)权限的文件操作都默认映射到 UID=65534 和 GID=65534 的用户,即 Ubuntu 系统中的 nobody:nogroup。
例如客户端使用 root 权限在挂载的共享目录中创建文件时,该文件的 属主 和 属组 自动变为 nobody:nogroup ,而非 root:root 。
sudo mkdir -p /var/nfs/gernel
sudo mkdir -p /var/nfs/public
sudo chown nobody:nogroup /var/nfs/gernel
为了使 NFS 服务器定义的共享文件可被指定的客户端主机访问,需要在服务器端的 /etc/exports 文件中添加对应的记录。
该文件的格式如下:
Directory Host(Options ...) Host(Options) #comment
关于 /etc/exports 文件的详细语法格式可参考 man exports 。
文件示例:
列出 nfs 服务器上的共享目录
创建挂载点
sudo mkdir -p /mnt/nfs/gernel
sudo mkdir -p /mnt/nfs/public
sudo mkdir -p /mnt/nfs/starky
挂载远程目录
sudo mount 192.168.56.102:/var/nfs/gernel /mnt/nfs/gernel
sudo mount 192.168.56.102:/var/nfs/public /mnt/nfs/public
sudo mount 192.168.56.102:/home/starky /mnt/nfs/starky
权限测试
NFS 的权限设定基于 Linux 文件系统的权限管理,即客户端挂载远程共享目录后,会把它们当成本地磁盘目录一样对待,也是根据文件的属主(组)及其对应的权限设定来限制访问。
gernel 目录的属主(组)为 nobody:nogroup(65534:65534),所以虽然该目录为读写权限,非 root 用户无法执行新建操作。而 root 用户由于 NFS 默认的安全机制,会自动映射到 nobody:nogroup。
由于我在客户端和服务端都有一个名为 starky 的用户,且它们的 UID:GID 都为1000:1000,所以服务端的 /home/starky 目录可以直接被客户端的 starky 用户访问。且由于 no_root_squash 选项,通过 sudo 命令创建的文件其属主仍为 root(而不会再映射为 nobody)。
当然这会导致一些安全问题,比如多个客户端同时都有 UID(GID)为1000的用户(不管用户名是什么),则这些用户会共享服务端 /home/starky 目录里的文件权限。
可编辑 /etc/fstab 文件令挂载共享目录的 mount 操作成为系统的固定配置(手动输入的 mount 命令属于临时挂载,重启会自动卸载),使得系统重启后可以自动挂载远程文件系统。 /etc/fstab 文件的示例内容如下:
/etc/exports 文件的格式为: Directory Host(Options ...) Host(Options) #comment
其中的 Host 项用来指定可访问对应共享目录的主机,其格式可分为以下几种:
传输协议
最初的 NFSv2 由于性能原因使用 UDP 协议,虽然 NFS 添加了自己的 包序列重组 和 错误检查 功能,但 UDP 和 NFS 都不具备 阻塞控制 算法,所以在大型的互联网络环境中缺乏足够的性能。
NFSv3 提供了 UDP 和 TCP 协议之间的选择。NFSv4 只能使用 TCP 协议。
随着 CPU,内存等硬件设备和网络传输速度的提高,最初由于性能需求而倾向 UDP 协议的选择也变得不再必要。
State
NFSv2 和 NFSv3 是 无状态 的连接,服务端不会跟踪客户端对共享目录的挂载情况,而是使用 "cookie" 来记录一次成功的挂载。"cookie" 不会因为服务器重启而删除,可以用来在服务器挂掉之后保留客户端的连接信息。
NFSv4 是 有状态 的连接,客户端和服务端都会维护文件操作纪录及文件锁的状态。所以不再需要 "cookie" 的使用。
文件锁
早期版本的 NFS 协议(v2 &v3)由于是 无状态 的连接,它们并不清楚哪些主机正在使用哪些文件。但是文件锁的实现又需要获取状态信息。所以早期协议中的文件锁是独立于 NFS 实现的。
而 NFSv4 将文件锁的实现整合到了核心协议中,虽然此举增加了复杂度,但同时也解决了早期版本中的很多问题。
但是为了兼容使用 V2 和 V3 协议的客户端,独立的 locked 和 statd 守护进程仍旧需要。
安全相关
NFS 协议最初在设计时并不关注安全性,NFSv4 通过引入对更强大的安全服务和身份验证的支持,加强了该协议的安全性。
传统的 NFS 协议大多使用 AUTH_SYS 验证方式,基于 UNIX 的用户和组标识。在这种方式下,客户端只需要发送自己的 UID 和 GID 并与服务器上的 /etc/passwd 文件内容作对比,以决定其拥有怎样的权限。
所以当多个客户端存在 UID 相同的用户时,这些用户会拥有相同的文件权限。更进一步,拥有 root 权限的用户可以通过 su 命令切换到任意 UID 登录,服务器会因此给予其对应 UID 的权限。
为了防止上面的问题出现,服务器可选择使用更健壮的验证机制比如 Kerberos 结合 NFS PRCSEC_GSS。
NFS 共享目录的访问控制基于 /etc/exports 文件中定义的主机名或 IP 地址。但是客户端很容易针对其身份和 IP 地址造假,这也会导致一些安全问题。
NFSv4 只使用 TCP 作为自己的传输协议,而且通常只开放 2049 端口进行数据传输。在配置防火墙时,除了放开 2049 端口的限制外,还要时刻注意数据传输的源地址和目标地址。
win10 系统默认不能挂载 NFS 共享目录,需要进入 控制面板 - 程序 - 程序和功能 - 启用或关闭 Windows 功能 ,勾选上 NFS 服务 。
UNIX and Linux System Administration Handbook, 4th Edition
How to Mount an NFS Share Using a Windows 10 Machine
Ubuntu 18.04上的Nginx默认启用了一个服务器模块,该模块被配置为在/var/www/html目录下提供文档。 虽然这适用于单个站点,但如果您托管多个站点,它可能会变得很笨重。 我们不必修改/var/www/html ,而是在/var/www为我们的 example.com 网站创建一个目录结构,并将/var/www/html保留为默认目录,如果客户端请求没有匹配任何其他网站。
按如下所示为example.com创建目录,使用-p标志创建任何必需的父目录:
$ sudo mkdir -p /var/www/ example.com/html
接下来,使用$USER环境变量分配目录的所有权:
USER:$USER /var/www/ example.com/html/
如果你没有修改你的umask值,你的web根目录的权限应该是正确的,但是你可以通过输入:
$ sudo chmod -R 755 /var/www/ example.com/
接下来,使用gedit或您最喜欢的编辑器创建一个index.html页面示例:
$ gedit /var/www/ example.com/html/index.html
在里面,添加下面的示例HTML:
<html>
<head>
<title>Welcome to Example.com!</title>
</head>
<body>
<h1>Success! The example.com server block is working!</h1>
</body>
</html>
为了让Nginx提供这些内容,有必要创建一个具有正确指令的服务器块。 我们不要直接修改默认配置文件,而是在/etc/nginx/sites-available/ example.com上创建一个新文件:
$ sudo gedit /etc/nginx/sites-available/example.com
粘贴到以下配置块中,该块类似于默认值,但已更新为我们的新目录和域名:
server {
listen 80
listen [::]:80
}
请注意,我们已将root配置更新到我们的新目录,并将server_name为我们的域名。
接下来,让我们通过创建一个链接到启动sites-enabled目录来启用该文件,该目录是Nginx在启动过程中读取的:
$ sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
现在启用两个服务器模块并将其配置为基于listen和server_name指令响应请求(您可以阅读关于Nginx如何处理这些指令的更多信息):
example.com :将响应 example.com 和 www.example.com 请求。
default :将响应端口80上与其他两个块不匹配的任何请求。
为了避免添加额外的服务器名称可能导致的哈希桶内存问题,有必要调整/etc/nginx/nginx.conf文件中的单个值。
打开文件:sudo gedit /etc/nginx/nginx.conf
找到server_names_hash_bucket_size指令并删除#符号以取消注释该行:
...
http {
...
server_names_hash_bucket_size 64
...
}
...
接下来,测试以确保您的Nginx文件中没有语法错误:
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
如果没有任何问题,请重新启动Nginx以启用您的更改:
$ sudo systemctl restart nginx
熟悉重要的Nginx文件和目录
nginx服务器配置文件:
/etc/nginx :Nginx配置目录。 所有的Nginx配置文件都驻留在这里。
/etc/nginx/nginx.conf :主要的Nginx配置文件。 这可以修改,以更改Nginx全局配置。
/etc/nginx/sites-available/ :可存储每个站点服务器块的目录。 除非将Nginx链接到sites-enabled了sites-enabled目录,否则Nginx不会使用此目录中的配置文件。 通常,所有服务器块配置都在此目录中完成,然后通过链接到其他目录启用。
/etc/nginx/sites-enabled/ :存储启用的每个站点服务器块的目录。 通常,这些是通过链接到sites-available目录中的配置文件创建的。
/etc/nginx/snippets :这个目录包含可以包含在Nginx配置其他地方的配置片段。 可重复配置的片段可以重构为片段。
nginx服务器日志文件:
/var/log/nginx/access.log :除非Nginx配置为其他方式,否则每个对您的Web服务器的请求都会记录在此日志文件中。
/var/log/nginx/error.log :任何Nginx错误都会记录在这个日志中。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)