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

网友投稿 271 2022-10-30


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

抛开云主机环境来说,通常一个办公网络内所有的主机都没有公网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即可。如果某两个云主机内网不通,但可以通过vpn连通,也可以实现。

(一)下面是两个主机间通过内网IP直接连接模拟访问Internet的例子。

主机A(服务端):

网卡1:10.20.0.128(eth0,无Internet访问)

网卡2:192.168.1.52(eth1,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 eth1 -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(eth1,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 openvpn      cd /etc/openvpn      git clone https://github.com/Open×××/easy-rsa.git      cd /etc/openvpn/easy-rsa/      git checkout -b v2.2.1      cp -r easy-rsa/2.0 /etc/openvpn/easy-rsa/      cd /etc/openvpn/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/openvpn/easy-rsa/2.0/keys/node1.51devops.com.key

编写一个Open××× Server端的配置文件:

vim /etc/openvpn/server.conf

port 1194          proto tcp      dev tun      ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt      cert /etc/openvpn/easy-rsa/2.0/keys/node1.51devops.com.crt      key /etc/openvpn/easy-rsa/2.0/keys/node1.51devops.com.key      dh /etc/openvpn/easy-rsa/2.0/keys/dh2048.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/openvpn-status.log      log         /var/log/openvpn.log      log-append  /var/log/openvpn.log      verb 3

启动Open×××并配置iptables:

service openvpn start          service openvpn status      ifconfig tun0      cat /var/log/openvpn.log      cat /var/log/openvpn-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 eth1 -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 eth1 -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 openvpn

编辑Open××× Client配置文件:

vim /etc/openvpn/client.conf      client      dev tun      port 1194      proto tcp      remote 10.20.0.128 1194      resolv-retry infinite      nobind      persist-tun      ca /etc/openvpn/ca.crt      cert /etc/openvpn/node2.51devops.com.crt      key /etc/openvpn/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/openvpn/node2.51devops.com.key     service openvpn 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

--end--


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:浅析java中Pair和Map的区别
下一篇:通过xrdp协议远程连接 ubuntu虚拟机
相关文章

 发表评论

暂时没有评论,来抢沙发吧~