在传统网络中,路由器会有一个“NAT 设置”页面,我们会将一些外部端口转发到 LAN 设备。例如,如果您有一个 192.168.1.0 网络,并且想要在机器 192.168.1.6:4000 上公开您的 HTTP 服务器,您可以登录路由器(例如 pfSense)并创建一个实际执行的转发规则:“WAN:80 -> 192.168.1.6:4000”。
我目前的状态如下:
(80) WAN_IP |== HOST MACHINE ==| <----> |== SoftEther (in Host Machine) ==| <---(internet)---> (6000) |== My box: 192.168.30.17 ==|
我在我的盒子(192.168.30.17,连接到虚拟集线器:“VPN”)的端口 6000 上运行一个应用程序,并且我想要通过 WAN_IP:80 访问该应用程序。
我如何在 SoftEther 中执行此转发?服务器是 Ubuntu,vpncmd
如果可能的话,我更喜欢 的说明。
答案1
在主机和虚拟集线器之间创建虚拟接口:
VPN_SERVER:$ sudo ./vpncmd localhost /server /cmd BridgeCreate VPN /DEVICE:ens2 /TAP:yes
检查新的虚拟接口(
tap_ens2
)是否已创建:VPN_SERVER:$ ifconfig | grep Ethernet ens2 Link encap:Ethernet HWaddr de:1a:18:12:e0:01 tap_ens2 Link encap:Ethernet HWaddr 5e:b4:a9:d3:82:50
为您的接口分配适当的 IP:
VPN_SERVER:$ ifconfig tap_ens2 192.168.30.5 # any available IP
测试您是否可以从主机访问 vpn 客户端(假设您在客户端的 6000 端口上启动了一个 web 服务器
python -m SimpleHTTPServer 6000
):VPN_SERVER:$ curl 192.168.30.17:6000 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html> <title>Directory listing for /</title> <body> <h2>Directory listing for /</h2> <hr> <ul> <li><a href="test.txt">test.txt</a> </ul> <hr> </body> </html>
创建
iptables
规则(使用 root 权限在 VPN_SERVER 上运行此脚本):#!/bin/bash brname=tap_ens2 # the interface connected to our private lan braddr=192.168.30.5 # interface IP assigned externally iface=ens2 # the interface connected to public internet # Run as root. [[ $(whoami) = "root" ]] || { sudo $0 "$@"; exit 0; } # Make sure that the IP forwarding is enabled echo 1 > /proc/sys/net/ipv4/ip_forward # Cleanup the iptables echo "Cleaning up NAT rules in iptables..." iptables -F -t nat echo "Adding forwarding rules" iptables -A FORWARD -i ${brname} -s ${braddr}/24 -m conntrack --ctstate NEW -j ACCEPT iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A POSTROUTING -t nat -j MASQUERADE fwd(){ # usage: fwd 1234 to 192.168.1.4:3000 local ext_port=$1 local internal=$3 # IP:Port iptables -t nat -A PREROUTING -i $iface -p tcp --dport $ext_port -j DNAT --to $internal } ## forward the desired ports fwd 2233 to 192.168.30.17:6000
使用你的公网 IP 进行测试:
ANYWHERE:$ curl WAN_IP:2233