AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1049272
Accepted
Mishgun_
Mishgun_
Asked: 2021-01-11 09:33:46 +0800 CST2021-01-11 09:33:46 +0800 CST 2021-01-11 09:33:46 +0800 CST

通过 OpenVPN 接口路由 Tinyproxy 传出连接

  • 772

我创建了一个 Ubuntu 16.04 lxd 容器并在其中设置了 Stunnel、Tinyproxy 和 OpenVPN 客户端。

目标是通过 Stunnel 连接到 Tinyproxy,并强制 Tinyproxy 使用 OpenVPN 的接口进行传出连接。

Stunnel -> Tinyproxy 工作正常 - 浏览器中的页面按预期加载,但是,一旦我启动 OpenVPN 服务,客户端的 Stunnel 就会因超时而失败,并且浏览器会一直等待响应。

由于 Tinyproxy 1.8.3(ubuntu 16.04 的最新版本)不支持将传出连接绑定到特定接口的选项,我不得不让 OpenVPN 通过其tun0接口添加默认路由。

OpenVPN 客户端作为 expexted 工作 - 来自容器的所有数据包都通过 VPN。带有容器的主机是具有公共 IP 的远程主机。DNAT 已设置到容器中。

我不太熟悉路由内部结构,我只能设置 SNAT/DNAT 并使用 iptables 进行过滤。因此,我无法理解问题的根源。

以下是环境中最重要的参数:

如果配置

$ ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:16:3e:5f:46:ba
          inet addr:10.227.60.197  Bcast:10.227.60.255  Mask:255.255.255.0
          inet6 addr: fe80::216:3eff:fe5f:46ba/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:16291 errors:0 dropped:0 overruns:0 frame:0
          TX packets:15632 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:5044056 (5.0 MB)  TX bytes:4171187 (4.1 MB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:2446 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2446 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:2483699 (2.4 MB)  TX bytes:2483699 (2.4 MB)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.8.0.3  P-t-P:10.8.0.3  Mask:255.255.255.0
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:252 (252.0 B)  TX bytes:252 (252.0 B)

路线

$ route -v -e
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         10.8.0.1        128.0.0.0       UG        0 0          0 tun0
default         10.227.60.1     0.0.0.0         UG        0 0          0 eth0
10.8.0.0        *               255.255.255.0   U         0 0          0 tun0
10.227.60.0     *               255.255.255.0   U         0 0          0 eth0
128.0.0.0       10.8.0.1        128.0.0.0       UG        0 0          0 tun0
<vpn server IP> 10.227.60.1     255.255.255.255 UGH       0 0          0 eth0

stunnel.con

...
accept = 10.227.60.197:8081
connect = 127.0.0.1:8080
...

tinyproxy.conf

...
Port 8080
Listen 127.0.0.1
...

vpnclient.conf

dev tun
proto udp
remote <vpn server ip> 1195
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
auth SHA512
cipher AES-256-CBC
key-direction 1
verb 3
#route-nopull 
...

iptables是空的。

ubuntu openvpn lxd stunnel tinyproxy
  • 1 1 个回答
  • 741 Views

1 个回答

  • Voted
  1. Best Answer
    Mishgun_
    2021-01-14T09:27:50+08:002021-01-14T09:27:50+08:00

    问题在于路由表配置。

    我注意到在删除 OpenVPN 添加的路由时:

    Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
    default         10.8.0.1        128.0.0.0       UG        0 0          0 tun0
    

    并尝试执行ping 8.8.8.8 -I tun0并同时监视数据包tcpdump -nn icmp,回复 icmp 请求实际上已命中eth0但不再继续。经过一番调查,我发现还应该有一个单独的路由表tun0和规则,因为服务器有 2 个接口。

    最后,我将 tinyproxy 更新到最新版本,以便能够指定出站接口,并禁用 OpenVPN 以推送默认路由,就像我在上面删除的那样。

    然后,我将表添加到/etc/iproute2/rt_tables:

    ...
    12 vpn
    

    向此表和规则添加了路由:

    ip route add 10.8.0.0/24 dev tun0 src 10.8.0.3 table vpn
    ip route add default via 10.8.0.1 dev tun0 table vpn
    
    ip rule add from 10.8.0.3/32 table vpn
    ip rule add to 10.8.0.3/32 table vpn
    

    之后,一切都按预期工作。

    • 0

相关问题

  • 无法通过 Ubuntu VPN 访问外部网络

  • ubuntu apt-get upgrade - 如何在 shell 中单击确定?

  • VirtualBox 上 Ubuntu 的访客优化技巧 [关闭]

  • 外部硬盘上的 virtualbox 虚拟硬盘驱动器(Vista 主机上的 ubuntu 客户机)

  • 如何在 Ubuntu 上挂载 LVM 分区?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve