< 返回vps服务器列表

如何配置无公网IP地址的云主机访问Internet

发布时间:2021-08-03    来源: 118云vps 阅读:
    抛开云主机环境来说,通常一个办公网络内所有的主机都没有公网IP地址,但他们都能通过具有IP地址的路由器(网关)设备访问Internet,此设备只需要具备NAT和转发功能即可。具有这样功能的设备当然可以用某台计算机代替。
    下面是一个最简单的模型:
 
    主机A(服务端):
 
    网卡1:内网IP地址1
 
    网卡2:公网IP地址3或者能访问Internet的某个IP地址3
 
    主机B(客户端):
 
    网卡1:内网IP地址2
 
    主机B想通过主机A访问Internet,只需要主机B指定主机A为网关,主机A能够将来自主机B的包伪装成主机A上的网卡2上的IP即可(sNAT)。
 
    因此云主机环境也是一样,只要保证两个云主机间内网是连通的,另一台云主机能访问Internet即可。如果某两个云主机内网不通,但可以通过***连通,也可以实现。
 
    (一)下面是两个主机间通过内网IP直接连接模拟访问Internet的例子。
 
    主机A(服务端):
 
    网卡1:10.20.0.128(eth0,无Internet访问)
 
    网卡2:192.168.1.52(eth2,Internet访问)
 
    主机B(客户端):
 
    网卡1:10.20.0.129(eth0,无Internet访问)
 
    主机A操作:
 
    开启iptables转发功能:
 
    sysctl -w net.ipv4.conf.default.accept_source_route=1
 
    sysctl -w net.ipv4.conf.default.rp_filter=0
 
    sysctl -w net.ipv4.ip_forward=1
 
    配置iptables NAT规则:
 
    modprobe iptable_nat
 
    iptables -t nat -A POSTROUTING -s 10.20.0.0/24 -o eth2 -j MASQUERADE
 
    删除iptables拒绝转发规则:
 
    iptables -D FORWARD -j REJECT --reject-with icmp-host-prohibited
 
    主机B操作:
 
    将默认网关配置成主机A的网卡1地址:
 
    route add -host 10.20.0.128/32 dev eth0
 
    route add default gw 10.20.0.128 dev eth0
 
    (二)下面是两个主机间通过Open×××连接模拟访问Internet的例子。
 
    主机A(服务端,CentOS6.x):
 
    网卡1:10.20.0.128(eth0,无Internet访问)
 
    网卡2:192.168.1.52(eth2,Internet访问)
 
    主机B(客户端,CentOS6.x):
 
    网卡1:10.20.0.129(eth0,无Internet访问)
 
    主机A操作:
 
    安装Open×××(安装Open×××也可以参考《CentOS6.7安装Open×××服务端》):
 
    yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
 
    yum -y install openssl open***
 
    cd /etc/open***
 
    git clone https://github.com/Open×××/easy-rsa.git
 
    cd /etc/open***/easy-rsa/
 
    git checkout -b v2.2.1
 
    cp -r easy-rsa/2.0 /etc/open***/easy-rsa/
 
    cd /etc/open***/easy-rsa/2.0/
 
    vim im vars
 
    export EASY_RSA="`pwd`"
 
    export OPENSSL="openssl"
 
    export PKCS11TOOL="pkcs11-tool"
 
    export GREP="grep"
 
    export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
 
    export KEY_DIR="$EASY_RSA/keys"
 
    echo NOTE: If you run ./clean-all, I will be doing a rm -rf on $KEY_DIR
 
    export PKCS11_MODULE_PATH="dummy"    export PKCS11_PIN="dummy"
 
    export KEY_SIZE=2048
 
    export CA_EXPIRE=3650
 
    export KEY_EXPIRE=3650
 
    export KEY_COUNTRY="CN"
 
    export KEY_PROVINCE="Shandong"
 
    export KEY_CITY="QingDao"
 
    export KEY_ORG="51devops"
 
    export KEY_EMAIL="uberurey_ups@163.com"
 
    export KEY_OU="Ops"
 
    export KEY_NAME="51devops"
 
    生成Open××× 证书以及key:
 
    source vars
 
    ./clean-all
 
    ./pkitool --initca
 
    ./pkitool --server node1.51devops.com
 
    ./build-dh
 
    # ./build-key node1.51devops.com     ./build-key node2.51devops.com
 
    chmod 400 /etc/open***/easy-rsa/2.0/keys/node1.51devops.com.key
 
    编写一个Open××× Server端的配置文件:
 
    vim /etc/open***/server.conf
 
    port 1194
 
    proto tcp
 
    dev tun
 
    ca /etc/open***/easy-rsa/2.0/keys/ca.crt
 
    cert /etc/open***/easy-rsa/2.0/keys/node1.51devops.com.crt
 
    key /etc/open***/easy-rsa/2.0/keys/node1.51devops.com.key
 
    dh /etc/open***/easy-rsa/2.0/keys/dh3048.pem
 
    server 10.8.0.0 255.255.255.0
 
    ifconfig-pool-persist clientiplist.txt
 
    client-to-client
 
    duplicate-cn
 
    keepalive 10 120
 
    comp-lzo
 
    persist-key
 
    persist-tun
 
    status /var/log/open***-status.log
 
    log         /var/log/open***.log
 
    log-append  /var/log/open***.log
 
    verb 3
 
    启动Open×××并配置iptables:
 
    service open*** start
 
    service open*** status
 
    ifconfig tun0
 
    cat /var/log/open***.log
 
    cat /var/log/open***-status.log
 
    iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 1194 -j ACCEPT     # iptables -I INPUT -m state --state NEW -m udp -p udp --dport 1194 -j ACCEPT     iptables-save || service iptables status
 
    service iptables save
 
    编辑内核参数,启用转发功能:
 
    vim /etc/sysctl.conf
 
    net.ipv4.conf.default.accept_source_route = 1
 
    net.ipv4.conf.default.rp_filter = 0
 
    net.ipv4.ip_forward = 1
 
    或者:
 
    sysctl -w net.ipv4.conf.default.accept_source_route=1
 
    sysctl -w net.ipv4.conf.default.rp_filter=0
 
    sysctl -w net.ipv4.ip_forward=1
 
    配置iptables,配置sNAT和FORWARD规则:
 
    modprobe iptable_nat
 
    iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth2 -j MASQUERADE
 
    iptables -D FORWARD -j REJECT --reject-with icmp-host-prohibited
 
    service iptables save || iptables-save > /etc/sysconfig/iptables
 
    tips:也可以清空iptables所有配置,再添加允许规则,这样可以避开一些reject规则。
 
    可以通过iptables -t nat -nL -v命令查看nat表状态。
 
    iptables -t nat -A POSTROUTING -s 10.20.0.0/24 -o eth2 -j MASQUERADE
 
    配置主机B(客户端)
 
    安装Open×××客户端:
 
    yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
 
    yum -y install openssl open***
 
    编辑Open××× Client配置文件:
 
    vim /etc/open***/client.conf
 
    client
 
    dev tun
 
    port 1194
 
    proto tcp
 
    remote 10.20.0.128 1194
 
    resolv-retry infinite
 
    nobind
 
    persist-tun
 
    ca /etc/open***/ca.crt
 
    cert /etc/open***/node2.51devops.com.crt
 
    key /etc/open***/node2.51devops.com.key
 
    remote-cert-tls server
 
    script-security 3
 
    ns-cert-type server
 
    comp-lzo adaptive
 
    verb 3
 
    mute 20
 
    缩小证书文件的权限,只允许当前用户访问,不允许组内其他用户和其他组访问
 
    chmod 400 /etc/open***/node2.51devops.com.key
 
    service open*** restart
 
    配置路由:
 
    route add -host 10.8.0.1/32 dev tun0
 
    route add default gw 10.8.0.1 dev tun0
 
    测试连接:
 
    ping -c4 10.8.0.1    ping -c4 114.114.114.114
 
    在Open×××连接前需要注意证书一定配置正确,时间同步,软件版本最好保持一致、OpenSSL软件包升级到最新版本。
 
    tag:Linux网络,Open×××配置,iptables sNAT