Я запускаю Apache2 на Ubuntu 20.04, и мой сервер доступен со всех устройств, подключенных к моему маршрутизатору WIFI (включая телефоны и ноутбуки). Это то, что отображается при доступе к моему серверу. Теперь я хочу получить доступ к своему серверу из Интернета.
Это результат route -n
frozenmafia@frozenmafia-H81M-S:~$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 600 0 0 wlxd03745b828ea
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 wlxd03745b828ea
192.168.1.0 0.0.0.0 255.255.255.0 U 600 0 0 wlxd03745b828ea
Это результат ifconfig
frozenmafia@frozenmafia-H81M-S:~$ ifconfig
enp3s0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 40:8d:5c:a5:eb:f9 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 5856 bytes 572976 (572.9 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5856 bytes 572976 (572.9 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlxd03745b828ea: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.39 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::2970:d411:fb39:7ff6 prefixlen 64 scopeid 0x20<link>
ether d0:37:45:b8:28:ea txqueuelen 1000 (Ethernet)
RX packets 388866 bytes 507534243 (507.5 MB)
RX errors 0 dropped 2905 overruns 0 frame 0
TX packets 263147 bytes 67686494 (67.6 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Это результат ufw status
frozenmafia@frozenmafia-H81M-S:~$ sudo ufw status
Status: active
To Action From
-- ------ ----
Apache Full ALLOW Anywhere
8080 ALLOW Anywhere
80/tcp ALLOW Anywhere
Apache Full (v6) ALLOW Anywhere (v6)
8080 (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
Это результат sudo netstat -tlpn
frozenmafia@frozenmafia-H81M-S:~$ sudo netstat -tlpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 706/systemd-resolve
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 975/sshd: /usr/sbin
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 938/cupsd
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 2201/smbd
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 2201/smbd
tcp6 0 0 :::80 :::* LISTEN 1045/apache2
tcp6 0 0 :::22 :::* LISTEN 975/sshd: /usr/sbin
tcp6 0 0 ::1:631 :::* LISTEN 938/cupsd
tcp6 0 0 :::445 :::* LISTEN 2201/smbd
tcp6 0 0 :::139 :::* LISTEN 2201/smbd
Чтобы сделать мою машину общедоступной, мне нужно выполнить переадресацию портов. Для этого я бы настроил свой маршрутизатор WIFI. Я сделал это вот так.
Я полагал, что этого должно быть достаточно, чтобы сделать мою машину общедоступной. Я тестировал это здесь. Это показывает, что мой порт закрыт.
Теперь я подумал об использовании iptables для перенаправления портов. Я выполнил это руководство и ввел следующие команды.
frozenmafia@frozenmafia-H81M-S:~$ cat /proc/sys/net/ipv4/conf/wlxd03745b828ea/forwarding
1
frozenmafia@frozenmafia-H81M-S:~$ sudo iptables -t nat -A PREROUTING -p tcp -i wlxd03745b828ea --dport 80 -j DNAT --to-destination 192.168.1.39:80
frozenmafia@frozenmafia-H81M-S:~$ sudo iptables -A FORWARD -p tcp -d 192.168.1.39 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
frozenmafia@frozenmafia-H81M-S:~$ ip route
default via 192.168.1.1 dev wlxd03745b828ea proto dhcp metric 600
169.254.0.0/16 dev wlxd03745b828ea scope link metric 1000
192.168.1.0/24 dev wlxd03745b828ea proto kernel scope link src 192.168.1.39 metric 600
Теперь я считаю, что я пробовал все, чтобы сделать свой сервер общедоступным. Я снова проверил доступность моей машины здесь, которая показывает мою ошибку.
Я связался со своим интернет-провайдером и подтвердил, что все порты открыты. Надеюсь, я объяснил и обосновал все, что делал. Было бы здорово, если бы кто-нибудь поправил меня и предоставил решение моей проблемы. Благодарю вас
Как @FedonKadifeli, упомянул, что у меня есть CGNAT. Чтобы сделать мой сервер общедоступным, я подписался на этот и использовал ngork.Теперь я и мои друзья могут получить доступ к моей веб-странице.