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 / 问题 / 495138
Accepted
David North
David North
Asked: 2013-04-02 07:38:17 +0800 CST2013-04-02 07:38:17 +0800 CST 2013-04-02 07:38:17 +0800 CST

带有 xl2tpd 和 racoon 的 VPN - 如何对来自非默认 IP 地址的流量进行 NAT

  • 772

我有一个运行 Debian 的服务器,它有这样的网络:

eth0 - has public IP address 1.2.3.4
eth1 - has public IP address 1.2.3.5

我正在尝试在我可以从我的 Android 手机连接到的服务器上设置一个 VPN。我按照http://wiki.debian.org/HowTo/AndroidVPNServer上的说明安装和配置 xl2tpd 和 racoon。一切正常,但我还有最后一项要调整:当我将手机连接到 VPN 时,从中路由手机流量的公共 IP 地址是 eth0 上的地址,即 1.2.3.4。我希望 VPN 流量在 eth1 的 IP 地址后进行 NAT,即 1.2.3.5(理想情况下,VPN 客户端继续连接到 1.2.3.4)。

我的防火墙规则如下所示:

VPN_CLIENT_RANGE=192.168.200.0/24
iptables -A INPUT -p udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT
iptables -A INPUT -p esp -j ACCEPT
iptables -A INPUT -p udp -m policy --dir in --pol ipsec -m udp --dport 1701 -j ACCEPT
# Enable VPN traffic on the ppp+ adapters (only active when a call is established)
# to go through the machine using SNAT/masquerading.
iptables -A FORWARD -i ppp+ -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp+ -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -s $VPN_CLIENT_RANGE -j MASQUERADE

我曾希望在最后三行中将 eth0 更改为 eth1 会达到正确的效果,但它没有 - VPN 客户端可以连接但无法再看到互联网,并且日志显示来自 VPN 客户端的流量(pppX 接口在服务器)仍然从 eth0 发送出去(防火墙在没有最后三行的情况下阻止了它)。

我是否需要以某种方式在 pppd 中配置源地址?或者更改 ppp 接口的默认路由?

vpn
  • 1 1 个回答
  • 1770 Views

1 个回答

  • Voted
  1. Best Answer
    David North
    2013-04-05T13:22:09+08:002013-04-05T13:22:09+08:00

    我已经解决了。

    当客户端连接到 VPN 时,就建立了 PPP 连接。

    数据包从客户端流向服务器上的 pppN 接口。导致它们通过“错误”IP 地址从那里流到互联网的原因是服务器的默认路由表:

    $ ip route show
    default dev eth0 scope link
    

    即所有出站流量都通过 eth0。

    假设我们不想更改默认路由,我们需要创建一个单独的路由表,其中包含通过 eth1 的默认路由,并让 VPN 使用它。

    将新表的条目添加到 /etc/iproute2/rt_tables :

    101 vpn
    

    该编号可以是文件中唯一的任何内容;该名称是手头工作的描述性名称。

    现在通过 eth1 将默认路由添加到此表中:

    # ip route add table vpn default dev eth1 scope link
    

    最后,强制根据我们的新表路由传入的 VPN 流量(在 pppN 接口上)。最简单的方法是使用 /etc/ppp/ip-up.d 和 ip-down.d 机制在 ppp 接口启动和关闭时添加和删除规则。

    /etc/ppp/ip-up.d/vpn-路由:

    #!/bin/sh
    IF=$1
    ip rule add dev $IF table vpn
    

    /etc/ppp/ip-down.d/vpn-路由:

    #!/bin/sh
    IF=$1
    ip rule delete dev $IF table vpn
    

    为了使所有这些在重启后仍然存在,您需要将“ip route add”行放在启动时执行的某些内容中——例如您的防火墙脚本——或者作为“up”行放在 eth0 上的 /etc/network/interfaces 中。

    • 1

相关问题

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

  • 用 D-LINK DFL-CPG310 防火墙替换 Cisco Pix 防火墙

  • 最好的点对点 VPN?

  • WAN 上的 VLAN

  • 通过 VPN 连接什么是远程服务器 IP?

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