openvpn 使用 dev tap 和 dev tun 有什么区别?我知道不同的模式不能互操作。除了第 2 层与第 3 层操作之外,还有什么技术差异。是否存在不同的性能特征,或不同级别的开销。哪种模式更好。每种模式中专门提供哪些功能。
这个问题类似于Openvpn 的在 lxc 来宾中没有 tun 设备。LXC 已经发展,最近推出了无特权的 LXC 容器,它提供了另一层防止越狱的安全性。
我需要在一个非特权容器中创建一个 OpenVPN 服务器。我不知道如何让容器创建一个私有的 tun 网络设备。
我确实附加lxc.cgroup.devices.allow = c 10:200 rwm到~/.local/share/lxc/mylxc/config.
启动容器后,mknod /dev/net/tun c 10 200返回mknod: '/dev/net/tun': Operation not permitted容器内部。
我使用 vanilla Ubuntu 14.04 64bit 作为主机和一个容器
lxc-create -t download -n mylxc -- -d ubuntu -r trusty -a amd64
Run Code Online (Sandbox Code Playgroud)
有没有人设法让/dev/tun设备在非特权 LXC 下运行?
以下问题只是我遇到问题的更大解决方案的一部分。到目前为止,所有其他元素似乎都在工作,所以我将尝试描述我有问题的非常小的部分。
我有一台 linux 机器,带有tun0(隧道接口)和eth0(witch 是我默认的互联网网关)。
目标:我的目标是接收从 tun0 传入的数据包,并将它们转发到默认网关。所以实际上非常简单的 NAT 案例,我想与伪造物理接口的 tun0“共享”互联网。
Tun 是使用创建的
sudo openvpn --mktun --dev tun0 --user USER
sudo ip addr add 10.2.0.1/24 dev tun0
sudo ip link set tun0 up
Run Code Online (Sandbox Code Playgroud)
所以我让它启动并运行,我可以 ping 它等等。此外,我有 C++ 应用程序,它连接到这个 TUN 设备,可以读取和写入它。(fti:这是我遵循的教程:http : //backreference.org/2010/03/26/tuntap-interface-tutorial/)
我将一些对 8.8.8.8 发出的正确 ICMP(ping)请求转储到 C++ 中的字节数组中。现在,使用我的程序将它写入 tun0 设备。ICMP 请求有
然后,我有以下路线:
iptables -F # flush
iptables …Run Code Online (Sandbox Code Playgroud) 使用 tun 设备的 openvpn 隧道,哪些 iptables 规则允许封装的流量通过,哪些规则控制封装后的数据包?基本上,我想知道操作顺序如何与 iptables 和 openvpn 一起工作,以及这与链有什么关系。
我已经设置了一个可以远程访问的 openvpn 服务器,一旦连接,它就会在服务器和客户端上创建一个 tun0 设备,虚拟 IP 为 10.15.119.x。openvpn 服务器本身是 10.15.119.1。
问题:我如何在 openvpn 服务器后面的局域网中寻址其他节点?我可以使用地址 10.15.119.1:(port) 访问 openvpn 服务器本身上的服务,但我不知道如何解决与 openvpn 服务器位于同一 LAN 中的不参与 openvpn 连接的其他节点:我会希望这些节点可以从客户端节点使用 10.15.119.x 范围内的其他虚拟 ip 寻址,如果是这种情况,我只需要一种方法来知道这些 ip 是什么
我很好地可以创建一些 iptables 和路由命令来将端口转发到其他特定节点,但我确信必须有更好的方法来做到这一点,直接寻址节点
服务器.conf:
dev tun
server 10.15.119.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 192.168.0.0 255.255.255.0"
up ./office.up
tls-server
dh /home/lurscher/keys/dh1024.pem
ca /home/lurscher/keys/ca.crt
cert /home/lurscher/keys/vpnCh8TestServer.crt
key /home/lurscher/keys/vpnCh8TestServer.key
status openvpn-status.log
log openvpn.log
comp-lzo
verb 3
Run Code Online (Sandbox Code Playgroud)
office.up 脚本具有:
#!/bin/sh
#route 10.15.119.0 255.255.255.0
route add -net 10.15.119.0 netmask 255.255.255.0 gw $5 #fixed the …Run Code Online (Sandbox Code Playgroud) 我已经使用创建了一个隧道设备
ip tuntap 添加 dev tun0 模式 tun 用户 0 组 0
然后我给它分配一个 ip 地址 192.168.0.1/22
ifconfig tun0 192.168.0.1 网络掩码 255.255.252.0
在我的以太网设备 eth0 上,我从 IP 地址范围 192.168.1.2-192.168.1.5 中的机器接收数据包。我希望这些数据包在隧道设备上转发。我不希望在以太网和隧道设备之间建立桥梁。因此,我在路由表中添加了路由条目,如下所示。
ip 规则添加从 192.168.1.0/24 查找 myinternal
ip route add default via 192.168.0.1 dev tun0 table myinternal
我已刷新(删除)所有 ip 表条目。但是有两个条目
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
当我在 tun0 上执行 tcpdump 时,我看不到来自 eth0 的数据包。但是,当我在 eth0 上执行 tcpdump 时,我可以看到数据包。我想知道如何在 tun0 上转发/捕获这些数据包。从 tun0 以后,我想处理这些数据包并从我的应用程序回复它们,如果需要,将它们传递到另一个接口。我无法将 eth0 …
我正在尝试配置 openvpn,以便只有来自某些进程的流量通过 vpn,但这些进程可以连接到任何地方。
我试图通过让 openvpn 不进行任何路由配置 ( --route-noexec) 并让应用程序显式连接到 tun 接口(例如:curl --interface tun0 'http://www.ipchicken.com')来做到这一点,但connect()似乎超时。
为了使 tun 界面满意,我还需要做什么其他步骤吗?
我的目标:
我想在公司 netcup 的虚拟服务器上设置 openVPN,运行 Debian 挤压。我只想要从客户端到服务器的 VPN 连接;客户端不应该能够看到对方,服务器也不需要作为其他服务的网关。
我的设置:
1个Debian挤压vServer,3个Windows 7客户端,2个OS X Lion客户端,客户端都在我的192.168.xx家庭子网中,服务器上的防火墙还没有设置限制,客户端上的防火墙不阻止传出连接,我什至根据这篇文章添加了 ICMPv4 协议作为例外:OpenVPN 服务器无法 ping 客户端。在子网中有一个 WLAN 路由器和 fritz.box 路由器,它是我的互联网提供商的网关。WLAN 路由器有防火墙,但也没有设置限制。
我的限制:
由于这是一个运行 openVPN 服务器的虚拟服务器,因此存在一些限制:1)必须首先解锁 tun 设备“tun1”并为其分配一个固定地址(10.240.43.1),我无法更改该地址,因为 2)对 ifconfig 的修改不允许,以及 IP 表(我理解这是因为虚拟技术正在为多个客户使用一个内核,因此不允许一个客户修改他们的设置),这意味着 3)我无法启用/禁用 IPv4 转发(是的,我我以 root 身份登录),之所以这么说是因为我已经发现 50 多个帖子几乎相同但略有不同的问题。
到目前为止有效的方法:
客户端可以通过 Windows 7 和 OS X Lion 的 openVPN GUI 客户端连接到 debian 机器上的 openVPN 服务器,客户端在所需的子网 (10.240.43.x) 中获得分配的 IP 地址,日志没有指示任何错误。我会在最后贴一个例子。
曾经有效的方法(这让我发疯):
在第二个 Windows 7 客户端上设置 openVPN 时,建立了连接,分配了 IP 地址,并且客户端可以在 tun 接口的地址上 ping 服务器。我很高兴我在同一台 macbook 上启动了 OS …
我正在尝试为使用 TUN 接口的 linux VPN 概念化网络是如何工作的。
我目前最好的猜测如下(请纠正我):
但是,发往远程客户端/服务器的数据包不会最终进入 TUN 接口并形成某种循环吗?VPN 系统如何解决这个问题?我的理解有什么差距?
根据OpenVPN 2 Cookbook:
persist-tun 和 persist-key 选项用于确保在底层网络中断时自动恢复连接。使用用户 nobody 和组 nobody(或组 nogroup)时,这些选项是必需的。
这在实践中意味着什么?
在服务器端有一个 tun0 设备。OpenVPN 进程以nobody 和nogroup 的身份运行。到目前为止一切正常。但是persist-tun选项究竟有什么作用呢?根据我是否连接,相同的 tun0 设备仍然存在。
从另一个问题:
摆脱persist-tun选项。如果没有该选项,则 VPN 链接将断开,tun 设备将关闭并被移除。当然,问题是删除该选项意味着您需要以 root 而不是 nobody 身份运行 VPN 守护进程。因为作为 nobody 帐户,当重新建立连接时,OpenVPN 将无法创建新的 tun 设备。
删除persist-tun选项后,tun设备仍然存在,没有连接的客户端。
请大神详细解释一下persist-tun、persist-key、user nobody、group nogroup、keepalive选项涉及的过程。
我正在摆弄 socat,并尝试使用 socat 创建一个 TUN 设备,用于在两个 debianstretch 服务器之间建立隧道。然而,吞吐量似乎非常低,与本地主机上的 TCP/TCP-Listen 的 iperf 相比,TUN 的吞吐量大约低 5 个数量级。
这是一个“最小工作示例”,显示速度如何受到影响。
# socat
socat TUN:10.10.0.2/16,iff-up TCP4-LISTEN:54321,bind=192.168.1.2,fork
# iperf service
iperf -s -p 15001 -B 10.10.0.2
Run Code Online (Sandbox Code Playgroud)
# socat
socat TUN:10.10.0.1/16,iff-up TCP4:192.168.1.2:54321
# iperf
iperf -c 10.10.0.2 -p 15001 -t 30
Run Code Online (Sandbox Code Playgroud)
# socat
socat TCP4-LISTEN:12345,bind=192.168.1.2,fork TCP4:127.0.0.1:15001
# iperf service
iperf -s -p 15001 -B 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
# socat
socat TCP4-LISTEN:54321,bind=127.0.0.1,fork TCP4:192.168.1.2:12345
# iperf
iperf -c 127.0.0.1 -p …Run Code Online (Sandbox Code Playgroud) 嗨,当我尝试在我的 Ubuntu 服务器中运行 openvpn 时出现以下错误
Fri Jan 8 02:12:59 2010 OpenVPN 2.1_rc11 i486-pc-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] built on Mar 9 2009
Fri Jan 8 02:12:59 2010 WARNING: --keepalive option is missing from server config
Fri Jan 8 02:12:59 2010 NOTE: the current --script-security setting may allow this configuration to call user-defined scripts
Fri Jan 8 02:12:59 2010 Diffie-Hellman initialized with 1024 bit key
Fri Jan 8 02:12:59 2010 WARNING: file '/etc/openvpn/easy-rsa/2.0/keys/server.key' is group or others accessible
Fri Jan 8 …Run Code Online (Sandbox Code Playgroud) 我有一个程序(由我编写),它创建一个 tun0 设备并设置一个路由,以便可以从此设备读取发往 172.16.1.0/24 子网的数据包。我现在正试图向另一个方向前进,并将数据包写入 tun 设备,该设备可以通过
我的第一个努力,只是更改源地址和目标地址以及端口工作正常。我可以运行以下命令:
nc -u -s MY_IP -p 4001 172.16.1.3 4000
Run Code Online (Sandbox Code Playgroud)
我的输入得到了回应。
我的第二个努力,实际上是从头开始生成输出数据包,目前正在失败。
我可以运行tcpdump -i tun0并查看我编写的数据包:
11:30:14.433489 IP (tos 0x0, ttl 32, id 0, offset 0, flags [none], proto UDP (17), length 56) 172.16.1.2.54167 > Ubuntu-dbacher.local.4011: [udp sum ok] UDP, length 28
Run Code Online (Sandbox Code Playgroud)
但是我的听众 ( nc -l -u -s MY_IP -p 4011) 什么也没看到。
我怀疑有什么问题阻止了 tun0 设备将其数据包路由出去,但我不知道如何了解数据包被丢弃的位置。
$ ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:172.16.1.1 P-t-P:172.16.1.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST …Run Code Online (Sandbox Code Playgroud)